最近我们在系统开发过程中遇到了一些冲突。我们发现,我们的团队有 3 种不同的测试方法,我们需要决定哪一种是最好的,并检查是否没有比这更好的方法。
首先,让我们面对一些事实:
- 我们在系统中有 3 个数据层(DTO、域对象、表)
- 我们使用 mapstruct 生成的映射器将每一层的对象映射到另一个层
- 我们使用的是 mockito
- 我们是单元 -测试我们的每一层
现在冲突:让我们假设我们要测试ExampleService哪个ExampleModelMapper用于映射ExampleModel到ExampleModelDto和做哪些测试需要一些额外的业务逻辑。我们可以通过三种不同的方式来验证返回数据的正确性:
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 原则。
我们很高兴听到每种方法的任何建议、评论、优缺点。我们也乐于看到任何其他解决方案。
你好。
最近我一直在做某种Android条码扫描应用程序。一切都很好,直到我意识到我的朋友在 IOS 上制作的同一个应用程序在检测条形码方面要好得多。Google Mobile Vision API 经常出错,它检测到的条形码是“72345...”,而真正的条形码是“12345...”。这是一个普遍问题吗?有什么解决办法吗?
当我将设备放在上方时,该条形码可以很好地检测到,但是在任何小移动之后,很有可能会得到错误的代码。
我在学习Java中的线程时遇到了一些问题.目标是进行模拟,向我们展示兔子在某种类型的板上如何从狼群中奔跑.每只狼和每只兔子都应该成为一个线索.所以我在Test类的main方法中创建了一个GUI,并创建了一个实现Runnable接口的新类.我认为这很容易也很合乎逻辑.但是现在,我如何AddRabbit从这些线程调用该方法?因为非常线程应该像下面这样做:
但是怎么样?