你需要一些方法來獲得模擬在那裏。這是測試的一部分。當你發現這樣的事情,並且你說「我無法測試」時,你需要重構代碼,以便測試。正是這種重構將緩慢地將怪異和奇怪的設計變成美麗的藝術。 (太深?)
例如:
interface Factory {
public SomeOtherClass create();
}
class ClassToTest {
Factory factory;
public void setFactory(Factory factory) { this.factory = factory }
public String methodToTest(object a, object b, object c) {
//Do Lots of cool stuff here
SomeOtherClass someOtherClass = factory.create();
someOtherClass.doMoreCoolStuff(a, b, c, this);
//Do even more cool stuff to "this" as it was updated by someOtherClass
}
的測試將是這樣的:
public void test() {
SomeOtherClass mock = EasyMock.create(SomeOtherClass.class);
Factory factory = EasyMock.create(Factory.class);
ClassToTest test = new ClassToTest();
test.setFactory(factory);
expect(factory.create()).andReturn(mock);
// can now test mock interaction
replay(mock,factory);
test.methodToTest(a,b,c);
verify(mock,factory);
}
有很多方法可以做到這一點。重點是讓你的代碼可測試。有很多次我發現自己需要一種方法來寫一些我只寫了一個類的方法,因爲我需要它來進行測試。
我不認爲你可以嘲笑那個類,除非你使用非常晦澀的Java黑魔法,通過設計,你應該避免實例化這樣的類,而應該關聯類,以便它們不那麼耦合。當你移動到關聯中時,你可以嘲笑周圍的對象。在你的情況下,你可以將你的實例化類和方法調用作爲一個私人調用,然後你不要模擬它,只是作爲methodToTest測試的一部分進行測試。 – Desorder 2014-12-05 20:56:48