模拟 class 对象作为函数的参数

Mock class object as parameter of function

我正在使用 junit 和 mokito 编写我的 java 程序的单元测试。

public MyClass {
    private ClassA a;
    public void process(ClassB b) {
        if(b.method()) a = ClassA.builder().build();

    }
}

现在我已经写好了MockClassA和MockClassB。但我不知道如何:

  1. 将 MockClassB 实例化传递给处理函数

  2. 如何验证私有变量a是否设置成功

有人可以帮忙吗?

您可以使用类似的东西:

@Test
public void shouldDoSomething() {
    // given
    ClassB mock = Mockito.mock(ClassB.class);
    Mockito.when(mock.method()).thenReturn(true);
    MyClass classUnderTest = new MyClass();

    // when
    classUnderTest.process(mock);

    // then
    // Insert assertions

}

但是,如果您的字段是私有的,您将无法对其进行正确测试。如果你想对它做出一些断言,你应该为这个字段提供一个 getter 。

但请记住,不应测试 MyClass 的内部表示,而应测试它的行为,因此也许您想尝试不同的方法