【发布时间】:2015-02-17 01:08:29
【问题描述】:
我正在阅读大量有关如何结合标题中的三个组件对事物进行正确单元测试的文档和示例。我为我的业务逻辑上的一个方法想出了一个测试方法,但感觉非常笨拙和肮脏。
我想从对此主题更有经验的人那里获得一些反馈,看看我可以如何改进它。
代码如下,解释如下:
[Fact]
public void ShouldGetItemWithSameId()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var facade = fixture.Freeze<Mock<IDataFacade>>();
facade.Setup(c => c.Get(It.IsAny<int>())).Returns((int i) => new Item { Key = i });
var sut = fixture.Create<BusinessLogic>();
var expected = fixture.Create<int>();
Assert.Equal(expected, sut.Get(expected).Key);
}
我的BusinessLogic 类将IDataFacade 作为构造函数参数,它负责在其Get(int) 方法中检索具有相同ID 的项目,非常基本的东西。
我冻结了 IDataFacade 模拟并设置它以构造一个与 It.IsAny<int> 中的 Id 匹配的对象。然后我创建我的 SUT 并对其进行测试。工作正常。
我想了解是否可以考虑以下方面进行改进:
- 我必须测试更复杂的方法,例如
Query方法,该方法采用一个包含许多属性的类,这些属性将用作对所查询类型的匹配属性的过滤器。在这种情况下,我不知道如何正确执行模拟的“设置”部分,因为我必须初始化所有或接近所有返回类型的属性,在这种情况下,它不是单个项目,而是整个系列 - 设置部分感觉不合适,我希望能够在更多方法中重复使用它
我使用Theory 和AutoMoqData 进行了一些其他测试,但我无法使用该方法实现此测试(而且我认为是更复杂的测试),所以我切换回使用手动实例化夹具的普通Fact .
任何帮助将不胜感激。
【问题讨论】:
-
您是否考虑过 (Auto)NSubstitute - 我对“起订量有什么问题”的默认态度太久了。 weareadaptive.com/blog/2014/09/30/why-nsubstitute
标签: c# unit-testing moq xunit.net autofixture