最佳答案
我是 xUnit.net 和 AutoFixture 的新手。
我目前正在做一个“ testproject”来熟悉 xUnit.net 和 Autofixture。 有件小事我不明白。
[Fact]
和 [Theory, AutoMoqData]
有什么不同?
你能告诉我下面两段代码是否相等吗? 我问这个问题是因为这两个测试都成功了,但我想以正确的方式学习它。
[Fact]
public void UpdateVersionWillUpdateCorrectlyInRepository()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var contract = fixture.Create<VersionContract>();
var version = fixture.Create<Version>();
fixture.Freeze<Mock<IContractMapper>>()
.Setup(r => r.Map(contract)).Returns(version);
var repMock = fixture.Freeze<Mock<VersionRepository>>();
var sut = fixture.Create<VersionManagementService>();
sut.UpdateVersion(contract);
repMock.Verify(r => r.UpdateVersion(version));
}
还有
[Theory, AutoMoqData]
public void UpdateVersionWillUpdateCorrectlyInRepository(
VersionContract contract,
Version version,
[Frozen]Mock<IContractMapper> mapMock,
[Frozen]Mock<VersionRepository> repMock,
VersionManagementService sut)
{
mapMock.Setup(r => r.Map(contract)).Returns(version);
sut.UpdateVersion(contract);
repMock.Verify(r => r.UpdateVersion(version));
}
让我觉得有区别的是关键字 [Fact]
和 [Theory]
。
我假设 [Theory]
关键字告诉 xUnit.net 框架所提供的数据来自某处,其中某处是 Autofixture。而 [Fact]
没有告诉 xUnit 数据的起源,我需要手动构建对象。