我最近開始使用Typemock,並查看了至少六個現有線程,但似乎無法找到我確切問題的答案。使用Typemock僞造每個父代的所有實例
我有一個從B派生出來的類C,它本身是從A派生出來的。C的實例就是我需要測試的,因此需要是真實的。但作爲C來自乙派生(或間接A),我需要當我創建C.
的實例見下面這兩個類完全自動僞造:
class A
{
protected int methodA()
{
return 1;
}
}
class B : A
{
protected int methodB()
{
return 5;
}
}
class C : B
{
public int methodC()
{
return methodA() * methodB();
}
}
class Test
{
public Test()
{
A fake_A = Isolate.Fake.AllInstances<A>(Members.ReturnRecursiveFakes, ConstructorWillBe.Ignored);
Isolate.NonPublic.WhenCalled(fake_A, "methodA").DoInstead((MethodCallContext ctx) =>
{
return 2;
}
);
B fake_B = Isolate.Fake.AllInstances<B>(Members.ReturnRecursiveFakes, ConstructorWillBe.Ignored);
Isolate.NonPublic.WhenCalled(fake_B, "methodB").DoInstead((MethodCallContext ctx) =>
{
return 10;
}
);
C c = new C(); // Would expect A and B to be faked automatically since I've faked all instances above.
int method_c_val = c.methodC(); // I get back 5, but what I need returned is 20.
}
}
這是的一個非常簡化的版本我正面臨的問題。這不僅僅是在父類中僞造一個或兩個方法的行爲。整個家長層面都需要僞造。所以A和B都需要完全僞造,而不是部分僞造。
一個我已經看了看線程是這一個,但在有指向一個地址的答案,不再可用:
https://www.typemock.com/answers/11613/mocking-all-instances-of-a-base-class
模擬部分系統測試的應用程序非常糟糕,嘲諷**單個對象的**方面**聽起來像一個可怕的想法。如果你真的必須這樣做,我建議你重構一個_composition pattern_ – MickyD
請你詳細說明爲什麼這是一個可怕的想法?鏈接到文章,討論,另一個線程,博客,什麼(什麼)來支持你的陳述?不是說我不相信你,但是一些例子會走很長的路...... – Ash
因爲你的班不是爲此目的而設計的。你所擁有的只是一組沒有_design pattern_的方法集合。推薦由「四人幫」設計模式書。祝你好運 – MickyD