0

任何人都可以解释我是否有区别:

@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() 将在每次测试之前运行,而在第二种情况下只会运行一次。但这是唯一的考虑吗?

此外,是否有必要让它运行不止一次?我应该在每种方法之后进行任何清理吗?

4

1 回答 1

2

不同之处在于,在第一个示例中,它将在每个测试之前运行,因此如果您有多个测试方法而不是只有一个测试方法,它将在每个测试之前执行。在你的情况下,我认为这没有任何区别。目的是,如果您希望类的每个测试方法都具有相同的配置,那么在 a 中使用它会更容易,BeforeEach而不是在每个方法中重复。您应该仅在需要时进行清理,这不是您总是或永远不必做的事情,这取决于具体情况。

于 2021-03-08T09:51:59.073 回答