我对Mockito很陌生,有一门课
public class A {
private B b;
public B getB() { return b; }
// ...
}
和
public class B {
private C c;
public C getC() { return c; }
// ...
}
我正在使用Mockito为A类编写单元测试,并试图实现以下行为,其中B是一个模拟:
when(a.getB().getC()).thenReturn(mock(C.class))
when(any(mock(C.class)).doSomething()).thenReturn("somethingElse") // This doesn't work.
当任何模拟的C实例调用doSomething()时,如何返回“somethingElse”?我不想将此行为绑定到任何一个特定的mock(C.class)实例。
不要添加用于创建新模拟的mock()。
就像这样
when(any(C.class).doSomething()).thenReturn("somethingElse");
首先,你必须把你的测试对象作为一个单元来对待,并模仿其他一切。因此,既然您正在测试类A
,就不能模拟A
s方法。
下面是如何使用Mockito使用注释来模拟B
的实例:
@MockitoSettings
public class ATest {
@Mock
private B b;
@InjectMocks
private A a;
@Test
void testExample() {
C c = mock(C.class):
when(b.getC()).thenReturn(c);
when(c.doSomething()).thenReturn("somethingElse");
// a.getB() == b
}
}
那么这里发生了什么?
注释@Mock
初始化类型为B
的模拟对象,并将字段变量B
设置为该对象。
@InjectMocks
正在收集所有@Mock
字段并设置对象中的字段。这是你的测试对象。
现在,您的A
实例有一个模拟的B
对象。在B中,你有C
。因为B
是一个模拟对象,所以方法getC()
根本不做任何事情。你必须用一些功能来存根。在测试中,我初始化了一个本地模拟的C
实例,从getC()
返回。
所以现在当A
对象访问模拟的B
并获取C
时,它将获取这个局部变量C
。所以你可以用模拟函数来存根这个对象。
问题内容: 通常,当我调用getGraphics()时,即使我设置了xxx.getGraphics();它也返回null。xxx可见(如Google搜索所示…) 但这是行不通的,这使我感到沮丧,因为它在C-Sharp中很容易实现。 有谁知道这样做的更好方法,而不是使用getGraphics()? 问题答案: 您通常不希望在Java Swing组件上使用getGraphics,因为如果尚未渲染该组件
问题内容: 是否有一种方法可以使每次调用方法时都会被调用的“超级方法”,即使对于未定义的方法也是如此?有点像这样: 编辑- 细节:我有一个库,该库进行了很多更新,并且每次更新都变得晦涩难懂。为了简化我的工作流程,我正在使程序自动更新库(需要执行我想做的事情,我不会具体说明原因,但是我的程序可以与将来的更新一起使用)并且我有混淆映射与库一起下载时,我想制作一种例如称为的代理,然后在我调用它时,将获得
我有一个类,它有两个方法。我想模拟这个类,然后模拟第一个方法,但不是第二个。 例如。 单元测试代码: 奇怪的是m2没有被调用。 我错过什么了吗?
问题内容: 使用模拟编写单元测试时遇到问题。我需要模拟的对象有很多吸气剂,我确实在代码中称呼它们。但是,这些不是我的单元测试的目的。因此,有一种方法可以模拟所有方法,而不是一个个地模拟它们。 这是代码示例: 这是我需要测试的服务等级 在测试类中,测试方法就像 因此,有一种方法可以避免将所有无用的“ field1”的“ when”写入“ field20” 问题答案: 您可以控制模拟的默认答案。在创建
我在用Mock编写单元测试时遇到了一个问题。有一个对象,我需要模拟有很多getter,我在代码中调用它们。但是,这些不是我的单元测试的目的。所以,有没有一种方法我可以模拟所有的方法,而不是一个一个地模拟它们。 下面是代码示例: 那么,有没有一种方法可以避免为无用的“field1”到“field20”写所有的“when”
主课 工具类 考试班 输出: 我试图嘲笑util无效的方法调用与do没什么,但不工作。有人能帮我解决吗?我在我们的应用程序中遇到了类似的功能。