gpt4 book ai didi

c# - 如何模拟在另一个方法中调用的方法?

转载 作者:太空狗 更新时间:2023-10-30 00:40:49 24 4
gpt4 key购买 nike

我想用一个例子来解释我的问题。

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);
}
}

阅读:

  1. Dependency Inversion Principle
  2. Dependency Injection

关于c# - 如何模拟在另一个方法中调用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com