这就是单元测试的正确本质吗?我想我不明白我应该测试什么。 ConverterContext是一个策略类
@SpringBootTest
@ExtendWith(SpringExtension.class)
class ConverterContextTest {
@Autowired
private final ConverterContext converterContext;
@Autowired
private final ConverterRegisterUserDto created;
@Autowired
ConverterContextTest(ConverterContext converterContext, ConverterRegisterUserDto created) {
this.converterContext = converterContext;
this.created = created;
}
@Test
void converterContextGivesCorrectConverter(){
ConverterRegisterUserDto returned = converterContext.getConverter(ConverterRegisterUserDto.class);
assertEquals(returned, created);
}
@Test
void converterContextGivesIncorrectConverter(){
ConverterShowUserDto returned = converterContext.getConverter(ConverterShowUserDto.class);
assertNotEquals(returned, created);
}
}
最佳答案
在单元测试中,您希望避免加载 spring boot 上下文。所以自己实例化ConverterContext
。
如果 ConverterContext
有一些您需要隔离的依赖项,您可以模拟它们(请参阅 Mockito 库)。
此外,您不需要 Autowiring 预期的内容。
它将使您的测试执行起来更快,更易于阅读。
请注意,在您的代码中 ConverterContext
显示为工厂而不是策略。
关于你的测试逻辑,我认为不需要第二个测试。
你要检查的是工厂返回它设计返回的东西。
断言实际不等于愚蠢的预期是完全没有用的。它就像死代码,你必须维护...
实际上,就像您在第一个测试中断言 add(1,1)
== 2
而在第二个测试中断言 add (2,1)
!= 2
.
为什么不断言所有 dumb expected 都不相等?
add(2,1)
!= 4
, add(2,1)
!= 5
, >add(2,1)
!= 6
,我们可以继续很长时间....
我希望单元测试看起来像(我使用 JUnit 5 方式来说明):
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.Mock;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(MockitoExtension.class)
class ConverterContextTest {
ConverterContext converterContext;
@Mock
FooDep fooDep;
@Mock
BarDep barDep;
@BeforeEach // or @Before in JUnit 4
void init{
converterContext = new ConverterContext(fooDep, barDep);
}
@Test
void converterContextGivesCorrectConverter(){
// mock which is required
/...
assertEquals(new ConverterRegisterUserDto(), converterContext.getConverter(ConverterRegisterUserDto.class));
// mock which is required
/...
assertEquals(new ConverterShowUserDto(), converterContext.getConverter(ConverterShowUserDto.class));
}
}
关于java - @SpringBootTest 测试类是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51774996/