小编Łuk*_*szG的帖子

使用和测试生成的映射器的正确方法

最近我们在系统开发过程中遇到了一些冲突。我们发现,我们的团队有 3 种不同的测试方法,我们需要决定哪一种是最好的,并检查是否没有比这更好的方法。

首先,让我们面对一些事实:
- 我们在系统中有 3 个数据层(DTO、域对象、表)
- 我们使用 mapstruct 生成的映射器将每一层的对象映射到另一个层
- 我们使用的是 mockito
- 我们是单元 -测试我们的每一层

现在冲突:让我们假设我们要测试ExampleService哪个ExampleModelMapper用于映射ExampleModelExampleModelDto和做哪些测试需要一些额外的业务逻辑。我们可以通过三种不同的方式来验证返回数据的正确性:

a) 我们可以手动将返回对象的每个字段与预期结果进行比较:

assertThat(returnedDto)
                .isNotNull()
                .hasFieldOrPropertyWithValue("id", expectedEntity.getId())
                .hasFieldOrPropertyWithValue("address", expectedEntity.getAddress())
                .hasFieldOrPropertyWithValue("orderId", expectedEntity.getOrderId())
                .hasFieldOrPropertyWithValue("creationTimestamp", expectedEntity.getCreationTimestamp())
                .hasFieldOrPropertyWithValue("price", expectedEntity.getPrice())
                .hasFieldOrPropertyWithValue("successCallbackUrl", expectedEntity.getSuccessCallbackUrl())
                .hasFieldOrPropertyWithValue("failureCallbackUrl", expectedEntity.getFailureCallbackUrl())
Run Code Online (Sandbox Code Playgroud)

b) 我们可以使用真正的映射器(与正常逻辑相同)来比较两个对象:

assertThat(returnedDto).isEqualToComparingFieldByFieldRecursivly(mapper.mapToDto(expectedEntity)))
Run Code Online (Sandbox Code Playgroud)

c) 最后,我们可以模拟映射器及其响应:

final Entity entity = randomEntity();
final Dto dto = new Dto(entity.getId(), entity.getName(), entity.getOtherField());
when(mapper.mapToDto(entity)).thenReturn(dto);
Run Code Online (Sandbox Code Playgroud)

我们希望使测试尽可能好,同时保持它们的弹性和抗变化性。我们也想保持 DRY 原则。

我们很高兴听到每种方法的任何建议、评论、优缺点。我们也乐于看到任何其他解决方案。

你好。

java mapping unit-testing mocking mapstruct

8
推荐指数
1
解决办法
2万
查看次数

Mobile Vision API 读取的条形码不正确

最近我一直在做某种Android条码扫描应用程序。一切都很好,直到我意识到我的朋友在 IOS 上制作的同一个应用程序在检测条形码方面要好得多。Google Mobile Vision API 经常出错,它检测到的条形码是“72345...”,而真正的条形码是“12345...”。这是一个普遍问题吗?有什么解决办法吗?

条形码示例: 在此输入图像描述

当我将设备放在上方时,该条形码可以很好地检测到,但是在任何小移动之后,很有可能会得到错误的代码。

java android google-vision

6
推荐指数
1
解决办法
2563
查看次数

在一个JPanel上画的10个线程

我在学习Java中的线程时遇到了一些问题.目标是进行模拟,向我们展示兔子在某种类型的板上如何从狼群中奔跑.每只狼和每只兔子都应该成为一个线索.所以我在Test类的main方法中创建了一个GUI,并创建了一个实现Runnable接口的新类.我认为这很容易也很合乎逻辑.但是现在,我如何AddRabbit从这些线程调用该方法?因为非常线程应该像下面这样做:

  1. 更改其属性,如地图上的位置
  2. 检查地图上的其他线程
  3. 在面板上涂漆

但是怎么样?

java swing multithreading rendering jpanel

3
推荐指数
1
解决办法
143
查看次数