ste*_*nze 60 c# xunit.net autofixture
我是xUnit.net和AutoFixture的新手.
我正在开发一个"测试项目"来熟悉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));
}
Run Code Online (Sandbox Code Playgroud)
和
[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));
}
Run Code Online (Sandbox Code Playgroud)
是什么让我认为关键词[Fact]
和关键词存在差异[Theory]
.
我假设[Theory]
关键字告诉xUnit.net框架提供的数据来自某处,其中某处是Autofixture.虽然[Fact]
告诉xUnit没有关于数据的来源,我需要手动构建对象.
Mar*_*ann 75
假设您的[AutoMoqData]
属性看起来像这样:
public class AutoMoqDataAttribute : AutoDataAttribute
{
internal AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后,是的,这两个测试是等价的.
两者[Fact]
和[Theory]
属性都由xUnit.net定义.
[Fact]
xUnit.net测试运行器使用该属性来标识"正常"单元测试:不带方法参数的测试方法.
[Theory]
另一方面,该属性需要一个或多个DataAttribute
实例为Parameterized Test的方法参数提供值.
xUnit.net本身提供从获得各种属性DataAttribute
:[InlineData]
,[ClassData]
,[PropertyData]
.
AutoFixture通过提供[AutoData]
属性挂钩到xUnit.net的这个可扩展点.它可以用来使测试更具说明性.
小智 12
事实是永远正确的测试。他们测试不变条件。
理论是仅适用于一组特定数据的测试。
来源:https://xunit.net/docs/getting-started/netfx/visual-studio
归档时间: |
|
查看次数: |
33907 次 |
最近记录: |