[英]How to auto generate Junit test cases for Entity classes and DTO's in spring project
[英]jUnit how to test methods that only set data from entity to dto
我在测试方法方面遇到了问题,这些方法只从实体获取数据并将其分配给 DTO。 我通过了空的 DTO,以及由 entityMother 创建的实体。 该方法工作正常,但我不知道如何对此进行断言。 我认为为这个 DTO 的每个值/属性创建断言并不是测试它的正确方法。
为什么我需要测试这样的方法?
@Test
public void shouldSetAvailabilities() {
EditedTemplateShowDto editedTemplateDto = new EditedTemplateShowDto();
productTemplateEditService.getAndSetAvailabilities(editedTemplateDto, editedProduct);
//Here should be condition which check that the metod set data
}
我只需要检查该方法是否没有抛出任何错误,并且没有任何字段分配了空值。
可能的解决方案是:
为什么我需要测试这样的方法?
首先,你不需要测试任何东西。 如果您觉得代码非常简单,那么我建议您将时间花在其他事情上。 或者也许编写一个全面的测试,这样至少你有代码覆盖率(但 IMO 你会做更多的统计而不是你的产品的实际质量)。
我只需要检查该方法没有抛出任何错误
这很容易! 只需编写一个调用该方法的单元测试。 如果该方法抛出任何异常,则测试将失败。 如果你想让你的测试方法更能揭示意图,你可以明确地写成这样:
try {
productTemplateEditService.getAndSetAvailabilities(editedTemplateDto, editedProduct);
} catch(Exception e) {
fail("Should not have thrown any exception");
}
但同样,我只会使用我希望抛出异常的方法来执行此操作(例如,因为它们具有异常路径或使用其他可能抛出异常的代码/库)。 任何单元测试的默认行为都是在遇到未捕获的异常时失败。
没有任何字段分配空值。
JUnit 方法是在您要确保不为空的任何字段的测试方法中使用assertNotNull
。
如果您想要更通用的方法,还有其他库,例如 assertj 的hasNoNullFieldsOrProperties
。
assertThat(editedTemplateDto).hasNoNullFieldsOrProperties();
或者您可以使用反射编写自己的代码,例如:
for (Field f : editedTemplateDto.getClass().getDeclaredFields())
assertNotNull(f.get(editedTemplateDto))
但是我建议不要这样做,因为它会使您的测试代码更难理解(并且可能很脆弱,因为反射本身可能很棘手)
将数据从实体设置为 DTO 的方法具有小的格式特定字段。 像分割字符串等。
这使单元测试变得有意义:验证 DTO 中的字段是否按预期填充。 所以不要只测试 notNull 而是测试
Assert.assertEquals("FieldX has a wrong value","myexpectedValue",dto.getFieldX());
通过这种方式,您可以测试拆分逻辑的行为是否符合预期。
还要在所有可选字段中使用空值对其进行测试,以验证您没有收到 NullPointerException。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.