ProgramingTip

사실과 이론의 차이?

bestdevel 2020. 12. 5. 10:20
반응형

사실과 이론의 차이? -xUnit.net


xUnit.net 및 AutoFixture를 처음 사용합니다.

저는 현재 xUnit.net과 Autofixture에 익숙해지기 위해 "testproject"를 작업 중입니다. 내가 이해하지 못하는 것이 작은 것이 하나 있습니다.

[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의 아무것도 알려야 수동으로 구축 할 수 있습니다.


[AutoMoqData]속성이 다음과 같다고 가정합니다 .

public class AutoMoqDataAttribute : AutoDataAttribute
{
    internal AutoMoqDataAttribute()
        : base(new Fixture().Customize(new AutoMoqCustomization()))
    {
    }
}

그렇다면 ,이 두 테스트는 동일합니다.

[Fact][Theory]속성은 모두 xUnit.net에 의해 정의됩니다.

[Fact]속성은 xUnit.net 테스트 실행기가 '정상'단위 테스트 (메서드 인수를 사용하지 않는 테스트 메서드)를 사용하는 데 사용됩니다.

[Theory]다른 한편 속성은 하나 DataAttribute이상의 인스턴스가 매개 변수화 된 테스트 의 메소드 인수에 대한 값을 제공 할 예상 합니다.

xUnit.net 자체에서 파생 된 다양한 속성을 제공 DataAttribute: [InlineData], [ClassData], [PropertyData].

AutoFixture는 [AutoData]속성 을 제공하여 xUnit.net의 확장 성 지점에 연결 합니다. 테스트를 더 선언적으로 만드는 데 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/22373258/difference-between-fact-and-theory-xunit-net

반응형