我是一名用C#编写的.Net开发人员,我被分配到一个项目,其经理希望它经过彻底的单元测试,主要是强调隔离,这样一个逻辑错误理想地失败了一个测试,并且测试之间没有依赖关系.
今天我们正在讨论测试模式,并出现了以下问题:
假设我们有一个名为的对象MyHashTable,它实现了:
void Add(string key, string value);
string GetValue(string key);
Run Code Online (Sandbox Code Playgroud)
我们想要独立地测试每个方法.当然,主要的问题是,从逻辑上讲,我们无法获得我们从未添加过的内容,而且我们无法在没有获取的情况下验证添加的内容.我们已经听过并读过关于存根/模拟和其他可能有助于克服这些问题的技术,但无法确定哪种解决方案最具可读性和可维护性.
因此,我要求提供建议/想法如何单独测试这些方法,如果可以,请为您的建议包含优缺点.谢谢!
我已经尝试使用它AutoMoqCustomization来自动模拟具有嵌套依赖关系的对象图,结果不像我预期的那样.下面是失败的测试代码(使用FluentAssertions进行断言).在运行测试时,IDependant注入的模型与之前冻结的模拟模型Dependant2不同IObject.这是嘲笑冻结的错误,还是我不能正确理解如何使用它?
注意:我读到了有关使用的内容AutoConfiguredMoqCustomization,但是当它有一个IDependant属性IObject Obj { get; }时它不起作用但是当它有一个方法时它可以工作IObject GetObj();,这是预期的行为AutoConfiguredMoqCustomization吗?
失败的测试代码:
[TestClass]
public class MyTestClass
{
[TestMethod]
public void Test()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var objMock = fixture.Freeze<Mock<IObject>>();
var sut = fixture.Create<Dependant2>();
sut.Obj.Should().BeSameAs(objMock);
}
}
public interface IObject { }
public interface IDependant { IObject Obj { get; } }
public class MyObject : IObject { }
public class Dependant2 …Run Code Online (Sandbox Code Playgroud)