如何测试 returns 在 Java 中使用 Jupiter 的新实例的实用程序方法?
How to test a utility method that returns a new instance using Jupiter in Java?
我有一个这样的:
class User {
String name;
}
class Contacts {
User getUser() {
return new User();
}
}
我这样做是为了在我的测试中我可以模拟这样的方法:
@ExtendWith(MockitoExtension.class)
class ContactsTest {
@Spy
private Contacts sut;
@Mock
private User user;
@Test
void testSomething() {
doReturn(user).when(sut).getUser();
}
@Test
void testGetUser() {
// verify(new User(), times(1));
// verify(user, times(1));
}
}
我如何测试 testGetUser
?
上面评论的仅有的两个想法给了我这些错误:
第一个:
org.mockito.exceptions.misusing.NotAMockException:
Argument passed to verify() is of type User and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
verify(mock).someMethod();
verify(mock, times(10)).someMethod();
verify(mock, atLeastOnce()).someMethod();
第二个
org.mockito.exceptions.misusing.UnfinishedVerificationException:
Missing method call for verify(mock) here:
首先,由于您的测试单元是 Contacts
class,因此无需 spy
并模拟其行为,因为这是 class 你需要测试。所以,我会继续删除它。
现在关于你的问题,你需要测试的是 getUser
的实际结果,所以最简单的测试是在 Contacts
的实例上调用方法并断言returned 结果是 User
对象的 non-null
实例。
如果您真的想测试 User
class 的构造函数是否被调用,您将需要使用 PowerMock
实际模拟该调用(建议反对和很可能甚至不能使用 JUnit5) 或使用 mockito-inline
.
完成此操作后,您将能够 return 来自构造函数调用的模拟 User
实例,然后您可以 运行 断言。
我有一个这样的:
class User {
String name;
}
class Contacts {
User getUser() {
return new User();
}
}
我这样做是为了在我的测试中我可以模拟这样的方法:
@ExtendWith(MockitoExtension.class)
class ContactsTest {
@Spy
private Contacts sut;
@Mock
private User user;
@Test
void testSomething() {
doReturn(user).when(sut).getUser();
}
@Test
void testGetUser() {
// verify(new User(), times(1));
// verify(user, times(1));
}
}
我如何测试 testGetUser
?
上面评论的仅有的两个想法给了我这些错误:
第一个:
org.mockito.exceptions.misusing.NotAMockException:
Argument passed to verify() is of type User and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
verify(mock).someMethod();
verify(mock, times(10)).someMethod();
verify(mock, atLeastOnce()).someMethod();
第二个
org.mockito.exceptions.misusing.UnfinishedVerificationException:
Missing method call for verify(mock) here:
首先,由于您的测试单元是 Contacts
class,因此无需 spy
并模拟其行为,因为这是 class 你需要测试。所以,我会继续删除它。
现在关于你的问题,你需要测试的是 getUser
的实际结果,所以最简单的测试是在 Contacts
的实例上调用方法并断言returned 结果是 User
对象的 non-null
实例。
如果您真的想测试 User
class 的构造函数是否被调用,您将需要使用 PowerMock
实际模拟该调用(建议反对和很可能甚至不能使用 JUnit5) 或使用 mockito-inline
.
完成此操作后,您将能够 return 来自构造函数调用的模拟 User
实例,然后您可以 运行 断言。