java - 如何初始化模拟对象?

标签 java unit-testing junit mocking easymock

假设我有以下代码:
模拟对象类

public class SomeClass {
    private Foo someField;
    public SomeClass {
        someField = new Foo();
    }
    public Foo getSomeField { return someField; }
    public void getSomething() {}
    public boolean doSomething(Object object) {}
}

接下来我有测试套件

public class TestSuite {
    private ClassToTest classToTest;
    private SomeClass mock;

    @Before
    public void setUp() {
        classToTest = new ClassToTest();
        mock = EasyMock.createMock(SomeClass.class);
    }

    @Test
    public void testMethod() throws Exception { 
        mock.getSomething();
        EasyMock.replay(mock);

        classToTest.methodToTest(mock); //Where methodToTest accepts SomeClass and int

        EasyMock.verify(mock);
    }
}

以及正在测试的方法

public void methodToTest(SomeClass a) {
    //Logic here
    Foo b = a.getSomeField();
    b.do(); // <--- null pointer exception here because someField isn't initialized
    a.getSomething(); // <--- thing I want to test if it is being called, but can't due to exception prior to this line
    //Logic after
}

我被卡住了..所以是的,基本上 SomeClass 没有像我想要的那样初始化。有什么解决方法吗?或者也许任何其他框架可以做类似的事情?

最佳答案

您的 methodToTest 调用 a.getSomeField(),但测试的设置部分不需要该调用。你想要这样的东西:

Foo foo = new Foo();
EasyMock.expect(mock.getSomeField()).andReturn(foo);

或者对调用进行 stub :

Foo foo = new Foo();
EasyMock.expect(mock.getSomeField()).andStubReturn(foo);

(在调用 mock.getSomething() 之前)。

参见this question了解 andReturnandStubReturn 之间的差异。

关于java - 如何初始化模拟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14737240/

相关文章:

unit-testing - 测试套件设置方法是对每个测试执行一次,还是只对所有测试执行一次?

java - JUnit 测试 getter 方法不起作用

java - https ://graph. facebook.com/v2.10/me/photos?access_token=xxxxxx 返回错误

java - 重写 XML 文件时使用哪种 Java XML 解析方法?

c# - 如何使用 xUnit、SubSpec 和 FakeItEasy 测试抛出的异常

junit 中的 java.lang.NoClassDefFoundError

java - 通过 Selenium 运行 JUnit 测试用例时出错

java - 调用ASyncTask进行通知

java - Json反序列化错误Spring Boot测试-无法构造实例

unit-testing - GoLang Sarama ConsumerGroup模拟