C# 事实与理论的区别xUnit.net
我对xUnit.net和AutoFixture不熟悉 我目前正在做一个“测试项目”,以熟悉xUnit.net和Autofixture。 有一件事我不明白C# 事实与理论的区别xUnit.net,c#,xunit.net,autofixture,C#,Xunit.net,Autofixture,我对xUnit.net和AutoFixture不熟悉 我目前正在做一个“测试项目”,以熟悉xUnit.net和Autofixture。 有一件事我不明白 [事实]和[理论,自动烟雾数据]之间有什么区别 你能告诉我以下两段代码是否相等吗? 我问这个是因为测试两者都成功了,但我想用正确的方法来学习 [Fact] public void UpdateVersionWillUpdateCorrectlyInRepository() { var fixture = new Fixture().Cu
[事实]
和[理论,自动烟雾数据]
之间有什么区别
你能告诉我以下两段代码是否相等吗?
我问这个是因为测试两者都成功了,但我想用正确的方法来学习
[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));
}
[事实]
public void updateVersionWillUpdateCorrectlyRepository()
{
var fixture=new fixture().Customize(new AutoMoqCustomization());
var contract=fixture.Create();
var version=fixture.Create();
冻结
.Setup(r=>r.Map(合同)).Returns(版本);
var repMock=fixture.Freeze();
var sut=fixture.Create();
sut.更新版本(合同);
Verify(r=>r.UpdateVersion(版本));
}
及
[理论,自动烟雾数据]
public void updateVersionWillUpdateCorrectlyRepository(
版本合同,
版本,
[冻结]模拟地图模拟,
[冻结]模仿,模仿,
版本管理服务(sut)
{
Setup(r=>r.Map(contract)).Returns(version);
sut.更新版本(合同);
Verify(r=>r.UpdateVersion(版本));
}
让我觉得有区别的是关键词[事实]
和[理论]
我假设
[Theory]
关键字告诉xUnit.net框架所提供的数据来自某个地方,其中某个地方是Autofixture。然而,[Fact]
没有告诉xUnit任何关于数据来源的信息,我需要手动构建对象。假设您的[AutoMoqData]
属性如下所示:
public class AutoMoqDataAttribute : AutoDataAttribute
{
internal AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
然后,是,这两个测试是等效的
[Fact]
和[Theory]
属性都是由xUnit.net定义的
xUnit.net测试运行程序使用[Fact]
属性来标识“正常”单元测试:一种不带方法参数的测试方法
另一方面,[Theory]
属性要求一个或多个DataAttribute
实例为a的方法参数提供值
xUnit.net本身提供了从DataAttribute
派生的各种属性:[InlineData]
,[ClassData]
,[PropertyData]
AutoFixture通过提供
[AutoData]
属性,钩住了xUnit.net的这个扩展点。它可以使测试更具声明性。感谢您的解释!是的,我的AutoMoqData属性与您的类似。顺便说一句:我喜欢你的.NET书籍中的依赖注入和我的测试项目“是建立在它之上的@BjörnAliGöransson不,AutoDataAttribute
是在AutoFixture.XUnit和AutoFixture.XUnit2中定义的。是不是只有我发现术语不清楚?它们是测试,但对我来说,事实和理论是非常不同的。你可以测试一个理论,但不是一个事实。。。不知道语言是硬的。@Noctis老实说,我也觉得事实和理论这两个术语有些做作,但这是xUnit.net团队所做的命名选择……简短回答:事实是一个无参数的理论。
public class AutoMoqDataAttribute : AutoDataAttribute
{
internal AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}