如何模拟类的成员变量?
似乎永远不会调用此FooA()
。
注意:我是moq的初学者(并且在C#中生锈)所以请耐心等待我; - )
未处理的异常:Moq.MockVerificationException:以下内容 设置不匹配: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();
}
}
}
答案 0 :(得分:2)
updateCheckUrl = updateCheckUrl.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
与依赖B
紧密耦合,这使得在测试时很难进行模拟。
通过构造函数注入重构IA
以依赖B
。 (Explicit Dependencies Principle)
IA
现在在测试中注入模拟的依赖项并验证行为
class B {
IA a;
public B(IA a) {
this.a = a;
}
public void FooB() {
a.FooA();
}
}