Java 如何从模拟对象中获取原始类名?
当我写来执行Java 如何从模拟对象中获取原始类名?,java,mockito,Java,Mockito,当我写来执行 aBook.getClass()它给出 Book aBook = mock(Book.class); 但是我想:classcom.tw.model.Book自从Mockito 2.1.0以来,您可以使用getMockCreationSettings()来获取有关被嘲笑的内容的详细信息。从 增加了通过访问模拟创建设置的可能性 Mockito.mockingDetails(mock).getMockCreationSettings() 下面是一个例子: classcom.tw.mod
aBook.getClass()
它给出
Book aBook = mock(Book.class);
但是我想:
classcom.tw.model.Book
自从Mockito 2.1.0以来,您可以使用getMockCreationSettings()
来获取有关被嘲笑的内容的详细信息。从
增加了通过访问模拟创建设置的可能性
Mockito.mockingDetails(mock).getMockCreationSettings()
下面是一个例子:
classcom.tw.model.Book$$EnhancerByMockitoWithCGLIB$$feb29207
@测试
公共无效测试(){
foomock=Mockito.mock(Foo.class);
MockCreationSettings MockCreationSettings=Mockito.mockingDetails(mock).getMockCreationSettings();
Assert.assertEquals(Foo.class,mockCreationSettings.getTypeToMock());
}
使用instanceof
而不是getClass()
现在可以使用模拟软件轻松测试这一点:
void methodUnderTest(Object object) {
if (object instanceof Book) {
Book book = (Book) object;
// read the book
}
}
aBook.getClass().getSuperclass()
(或者.getInterfaces()
中的一个类,如果模拟类是一个接口)。但是,为什么您需要知道这些信息呢?总的来说,如果您需要知道实例的实际类,那么您的设计就有问题。doAnswer(…)。但是,当(…)
?@Pelocho:getClass
是最终的。这可能有点棘手。你能用instanceof代替getClass吗?根据我的评论,我假设OP正在测试的方法中调用getClass。这种方法不能解决OPs的问题。OP没有明确他想在哪里调用aBook.getClass()
,所以我认为(至少对我来说:)他想在哪里/何时/如何获得模拟的原始类型还不清楚,如果他想在测试用例中得到它,那么这个答案会起作用,但是如果他需要在测试系统中得到它,那么它就不会起作用。是的,你是对的,我为另一个用例添加了一个答案;)
void methodUnderTest(Object object) {
if (object instanceof Book) {
Book book = (Book) object;
// read the book
}
}
@Test
public void bookTest() {
methodUnderTest(mock(Book.class));
}