【发布时间】:2021-09-01 11:35:14
【问题描述】:
我有以下两个课程ClassA 和ClassB。
关注:ClassB 实现了ClassA 的工厂。
我想测试ClassB。那么我(或者你会)如何模拟ClassA 的工厂,以便ClassB 可以实例化ClassA 的模拟并访问其模拟函数.ReturnString()?
public class ClassA : IClassA
{
readonly int _number;
public ClassA(int number)
{
_number = number;
}
public string ReturnString()
{
return _number.ToString();
}
}
public class ClassB : IClassB
{
int _exampleValue;
readonly Func<int, IClassA> _classAFactory;
public ClassB(Func<int, IClassA> classAFactory)
{
_classAFactory = classAFactory;
}
public string ExampleFct()
{
_exampleValue = 5;
IClassA classA = _classAFactory(_exampleValue)
return classA.ReturnString();
}
}
public class TestClassB
{
[Fact]
public void TestClassBReturnsCorrectString()
{
// Arrange
var mockClassAFact = ???
IClassB classB = new ClassB(mockClassAFact);
// Act
string aString = classB.ExampleFct();
// Assert
Assert.True(aString == "5");
}
}
由于我使用“Autofac”作为 IoC 的基础,因此可能有特定的解决方案?
感谢您的帮助!
【问题讨论】:
-
不过,那不是工厂。或者这个例子可能过于简单了。
-
我可能误解了“工厂”。所以你说 "Func
" 不是 ClassA 的工厂?
标签: c# dependency-injection autofac factory xunit