我想用一个例子来解释我的问题。
Class A
{
Fun1()
{
// some code
B obj2 = new B();
obj2.Fun2();
}
}
Class B
{
Fun2()
{
// some code
}
}
// Test Class for Class A
Class A_Test
{
Fun1_Test()
{
A obj1 = new A();
A.Fun1();
}
}
我在这里调用 Fun1
,它调用 fun2()
。我想模拟调用 fun2()。
我只需要在 Fun1() 中初始化 B 类对象,我不想使用构造函数来完成。
可以模拟调用 fun2() 吗?
最佳答案
你不能,因为 Fun2
是在 Fun1
中创建的对象的实例方法。
由于A
依赖于B
,所以要将B
注入(inject)到A
中,如果要实现true隔离。
您还应该“依赖于抽象”,正如依赖倒置原则所宣传的那样。让B
实现接口(interface)IB
,让A
依赖于IB
。然后,您模拟接口(interface) IB
并改为注入(inject)该模拟。
class A
{
public Fun1(IB ib) { ib.Fun2(); }
}
interface IB
{
Fun2();
}
class B : IB
{
public Fun2() {}
}
// Test Class for Class A
Class A_Test
{
Fun1_Test()
{
var bMock = new Mock<IB>();
bMock.Setup(b => b.Fun2());
A obj1 = new A();
A.Fun1(bMock.Object);
}
}
阅读:
关于c# - 如何模拟在另一个方法中调用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383915/