gpt4 book ai didi

c# - 模拟成员变量

转载 作者:行者123 更新时间:2023-11-30 23:12:25 26 4
gpt4 key购买 nike

如何模拟一个类的成员变量?

似乎从未调用此 FooA()

注意:我是最小起订量的初学者(在 C# 方面生疏)所以请耐心等待 ;-)

Unhandled Exception: Moq.MockVerificationException: The following setups were not matched: IA a => a.FooA()

这是源代码:

using Moq;

namespace TestMock
{
interface IA {
void FooA();
}
class A : IA {
public void FooA() { }
}

class B {
public void FooB() {
a.FooA();
}
IA a = new A();
}

class Program
{
static void Main(string[] args)
{
// Arrange
var mockA = new Mock<IA>();
mockA.Setup(a => a.FooA());
var mockB = new Mock<B>();

// Act
B b = new B();
b.FooB();

// Assert
mockA.VerifyAll();
}
}
}

最佳答案

B 的原始形式与依赖项 IA 紧密耦合,这使得在测试时难以模拟。

通过构造函数注入(inject)重构 B 以依赖于 IA。 ( Explicit Dependencies Principle )

class B {
IA a;

public B(IA a) {
this.a = a;
}

public void FooB() {
a.FooA();
}
}

现在在测试和验证行为中注入(inject)模拟依赖

[TestMethod]
public void TestMoq() {
// Arrange
var mockA = new Mock<IA>();
mockA.Setup(a => a.FooA());

// Act
B b = new B(mockA.Object);
b.FooB();

// Assert
mockA.VerifyAll();
}

关于c# - 模拟成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44156486/

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