Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 事实与理论的区别xUnit.net_C#_Xunit.net_Autofixture - Fatal编程技术网

C# 事实与理论的区别xUnit.net

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

我对xUnit.net和AutoFixture不熟悉

我目前正在做一个“测试项目”,以熟悉xUnit.net和Autofixture。 有一件事我不明白

[事实]
[理论,自动烟雾数据]
之间有什么区别

你能告诉我以下两段代码是否相等吗? 我问这个是因为测试两者都成功了,但我想用正确的方法来学习

[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()))
    {
    }
}