问题描述
如果有以下区别,谁能解释一下:
@SpringBoottest
public class MyServiceMockTest {
@Mock
private MyRepository myRepository;
@InjectMocks
private MyService myService = new MyServiceImpl();
@BeforeEach
void setMockOutput() {
when(myRepository.get(anyString())).thenReturn("something fetched");
}
@Test
void testGet() {
assertEquals("something fetched",myService.get());
}
}
还有这个:
@SpringBoottest
public class MyServiceMockTest {
@Mock
private MyRepository myRepository;
@InjectMocks
private MyService myService = new MyServiceImpl();
@Test
void testGet() {
when(myRepository.get()).thenReturn("something fetched");
assertEquals("something fetched",myService.get());
}
}
我明白,显然在第一种情况下 when(...).thenReturn() 将在每次测试之前运行,而在第二种情况下只会运行一次。但这是唯一的考虑吗?
另外,是否有必要让它运行多次?每种方法后我都应该做任何清理吗?
解决方法
不同之处在于,在第一个示例中,它将在每个测试之前运行,因此,如果不是只有一个测试方法,而是有多个测试方法,它将在每个测试之前执行。在你的情况下,我认为这没有任何区别。
目的是如果您希望类的每个测试方法都具有相同的配置,那么将它放在 BeforeEach
中而不是在每个方法中重复会更容易。
您应该只在需要时进行清理,这不是您总是或永远不必做的事情,这取决于具体情况。