2
可以说我有以下代码:
嘲笑对象类如何初始化模拟对象?
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是不是像我想要的初始化。有什么解决方法吗?或者可能有其他的框架可以做到这一点?
你是对的我忘了测试它。但事实并非如此。问题是你可以看到我的构造函数初始化'someField',并且当我进行模拟时,'someField'为空,结果整个'methodToTest'中断。那意味着构造函数没有被调用? – randomUser56789
@ su234fk234hawuhsafklsfjs:你的*正常*实现做什么是无关紧要的。你在嘲笑那个班级,所以它的行为并不重要。只要你嘲笑你正在做的调用,以便'getSomeField()'返回一个非空引用,这没关系。 –
但问题是'getSomeField();'返回null,因为'SomeClass'初始化'someField'没有别的也没有setter。我不明白如果通过'b.do();' – randomUser56789