Mockito Exectues“何时到达”从以前的测试
当我分开运行这些测试时,它们工作正常,但是当我执行“在课堂中运行所有测试”时,test shopsaveproduct会失败。我得到了以前的测试中指定的异常(“ dataintegrityviolationException”)。它看起来像Mockito.When(productrepositorymock.save(any(任何()))。theReturn(product);
不覆盖:
Mockito.when(productRepositoryMock.save(any())).thenThrow(new DataIntegrityViolationException("...SYMBOL_UQ..."));
@ExtendWith(MockitoExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class ProductServiceImplTest {
private ProductService productService;
private ProductRepository productRepositoryMock;
@BeforeAll
void setup() {
productRepositoryMock = Mockito.mock(ProductRepository.class);
productService = new ProductServiceImpl(productRepositoryMock);
}
@Test
void shouldThrowProductExceptionBecauseOfDuplicateSymbol() {
// given
Product product = new Product();
Mockito.when(productRepositoryMock.save(any()))
.thenThrow(new DataIntegrityViolationException("...SYMBOL_UQ..."));
// when && then
ProductException exception = Assertions.assertThrows(ProductException.class, () ->
productService.saveProduct(product), "Expected to throw ProductException");
assertEquals(ProductExceptionMessage.SYMBOL_MUST_BE_UNIQUE, exception.getMessage());
}
@Test
void shouldSaveProduct() {
// given
Product product = getProduct();
Mockito.when(productRepositoryMock.save(any())).thenReturn(product);
// when
ProductTO resultProduct = productService.saveProduct(product);
// then
assertEquals(product.getName(), resultProduct.getName());
}
}
当我使用@testinstance(testinstance.lifecycle.per_method)时代码>和
@beforeeach
,它有效,但我不明白为什么它不适用于上面介绍的配置。有人可以向我解释吗?
When I run these tests separetly, they work just fine but when I execute "run all tests in class", then test shouldSaveProduct fails. I get exception("DataIntegrityViolationException") which is specified in previous test. It looks like Mockito.when(productRepositoryMock.save(any())).thenReturn(product);
does not override:
Mockito.when(productRepositoryMock.save(any())).thenThrow(new DataIntegrityViolationException("...SYMBOL_UQ..."));
@ExtendWith(MockitoExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class ProductServiceImplTest {
private ProductService productService;
private ProductRepository productRepositoryMock;
@BeforeAll
void setup() {
productRepositoryMock = Mockito.mock(ProductRepository.class);
productService = new ProductServiceImpl(productRepositoryMock);
}
@Test
void shouldThrowProductExceptionBecauseOfDuplicateSymbol() {
// given
Product product = new Product();
Mockito.when(productRepositoryMock.save(any()))
.thenThrow(new DataIntegrityViolationException("...SYMBOL_UQ..."));
// when && then
ProductException exception = Assertions.assertThrows(ProductException.class, () ->
productService.saveProduct(product), "Expected to throw ProductException");
assertEquals(ProductExceptionMessage.SYMBOL_MUST_BE_UNIQUE, exception.getMessage());
}
@Test
void shouldSaveProduct() {
// given
Product product = getProduct();
Mockito.when(productRepositoryMock.save(any())).thenReturn(product);
// when
ProductTO resultProduct = productService.saveProduct(product);
// then
assertEquals(product.getName(), resultProduct.getName());
}
}
When I use @TestInstance(TestInstance.Lifecycle.PER_METHOD)
and @BeforeEach
, then it works but I don't understand why it doesn't work with configuration presented above. Can anyone explain it to me?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为这线
使JUNIT创建一个测试类的实例,并在测试之间重复使用。
Because this line
Its make Junit create one instance of the test class and reuse it between tests.