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));
}