Atu*_*tul 4 c# unit-testing moq
我想用一个例子来解释我的问题.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里打电话给Fun1哪个电话fun2().我想模拟对fun2()的调用.
我只需要在Fun1()中初始化B类对象,我不想使用构造函数来做.
可以模拟对fun2()的调用吗?
你不能,因为Fun2是在里面 创建的对象的实例方法Fun1.
既然A要依赖B,就B应该注入A,如果要实现真正的隔离.
您还应该"依赖于抽象",如依赖性倒置原则所宣传的那样.让B实现一个接口IB,并A依靠IB代替.然后,您模拟界面IB并注入该模拟.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
读:
| 归档时间: |
|
| 查看次数: |
6007 次 |
| 最近记录: |