xUnit.net 및 AutoFixture를 처음 사용했습니다.사실과 이론의 차이점은 무엇입니까? - xUnit.net
저는 현재 "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에 데이터의 출처에 대해 아무 것도 말하지 않고 수동으로 객체를 만들어야합니다.
public class AutoMoqDataAttribute : AutoDataAttribute
{
internal AutoMoqDataAttribute()
: base(new Fixture().Customize(new AutoMoqCustomization()))
{
}
}
그런 다음, 예이 두 시험은 동일합니다
설명해 주셔서 감사합니다. 예, 내 AutoMoqData-Attribute는 귀하의 것과 같습니다. BTW : .NET Book에서 "Dependency Injection"을 좋아하고 "Testproject"가 빌드됩니다! – sternze
코드에서 DataAttribute를 사용하지 않아야합니까? –
@ BjörnAliGöransson 아니요, AutoDataAttribute는 * AutoFixture.XUnit *에 정의되어 있습니다. * AutoFixture.XUnit2 *. –