C# 在这种情况下如何使用AutoFixture?
我有以下代码:C# 在这种情况下如何使用AutoFixture?,c#,autofixture,C#,Autofixture,我有以下代码: var boundArgument = new BoundArgumentOption { PatientId = patientId }; var mockRepositoryFactory = A.Fake<IRepositoryFactory>(); var sut = new HtmlOutputBuilder(mockRepositoryFactory); var patientRecord = // Some record; var moc
var boundArgument = new BoundArgumentOption
{
PatientId = patientId
};
var mockRepositoryFactory = A.Fake<IRepositoryFactory>();
var sut = new HtmlOutputBuilder(mockRepositoryFactory);
var patientRecord = // Some record;
var mockRepository = A.Fake<IRepository>();
A.CallTo(() => mockRepository.Get(boundArgument)).Returns(patientRecord);
A.CallTo(() => mockRepositoryFactory.Create(boundArgument)).Returns(mockRepository);
string actualResult = sut.BuildReport(boundArgument);
actualResult.Should().Be(expectedHtmlContent);
var boundArgument=new BoundArgumentOption
{
PatientId=PatientId
};
var mockRepositoryFactory=A.Fake();
var sut=新的HtmlOutputBuilder(mockRepositoryFactory);
var patientRecord=//一些记录;
var mockRepository=A.Fake();
A.CallTo(()=>mockRepository.Get(boundArgument)).Returns(patientRecord);
A.CallTo(()=>mockRepositoryFactory.Create(boundArgument)).Returns(mockRepository);
字符串actualResult=sut.BuildReport(boundArgument);
actualResult.Should().Be(expectedHtmlContent);
这就通过了测试
然后,我尝试使用AutoFixture,如下所示:
var fixture = new Fixture().Customize(new AutoFakeItEasyCustomization());
var boundArgument = fixture.Create<BoundArgumentOption>();
var mockRepositoryFactory = A.Fake<IRepositoryFactory>();
fixture.Freeze(mockRepositoryFactory);
var sut = fixture.Create<HtmlOutputBuilder>();
var patientRecord = //Some record;
boundArgument.PatientId = patientId;
var mockRepository = A.Fake<IRepository>();
A.CallTo(() => mockRepository.Get(boundArgument)).Returns(patientRecord);
A.CallTo(() => mockRepositoryFactory.Create(boundArgument)).Returns(mockRepository);
string actualResult = sut.BuildReport(boundArgument);
actualResult.Should().Be(expectedHtmlContent);
var fixture=newfixture().Customize(new AutoFakeItEasyCustomization());
var boundArgument=fixture.Create();
var mockRepositoryFactory=A.Fake();
夹具冻结(模拟存储工厂);
var sut=fixture.Create();
var patientRecord=//一些记录;
boundArgument.PatientId=PatientId;
var mockRepository=A.Fake();
A.CallTo(()=>mockRepository.Get(boundArgument)).Returns(patientRecord);
A.CallTo(()=>mockRepositoryFactory.Create(boundArgument)).Returns(mockRepository);
字符串actualResult=sut.BuildReport(boundArgument);
actualResult.Should().Be(expectedHtmlContent);
它失败了。特别是,第二个实例中的patientRecord
没有正确填充
我做错了什么?注意:我无法编译您提供的测试。。然而,似乎你所要做的就是:
fixture.Inject(mockRepositoryFactory);
您可以尝试以下方法:
[Fact]
public void TestWithAutoFixtureImperatively()
{
// Fixture setup
var fixture = new Fixture()
.Customize(new AutoFakeItEasyCustomization());
var expectedRecord = fixture.Create<string>();
var boundArgOption = fixture.Create<BoundArgumentOption>();
var repositoryStub = A.Fake<IRepository>();
A.CallTo(() =>
repositoryStub
.Get(boundArgOption))
.Returns(expectedRecord);
var repositoryFactoryStub = A.Fake<IRepositoryFactory>();
A.CallTo(() =>
repositoryFactoryStub
.Create(boundArgOption))
.Returns(repositoryStub);
fixture.Inject(repositoryFactoryStub);
var sut = fixture.Create<HtmlOutputBuilder>();
// Exercise system
string result = sut.BuildReport(boundArgOption);
// Verify outcome
result.Should().Be(expectedRecord);
// Teardown
}
AutoDomainDataAttribute
定义为:
internal class AutoDomainDataAttribute : CompositeDataAttribute
{
internal AutoDomainDataAttribute()
: base(
new AutoDataAttribute(
new Fixture().Customize(
new AutoFakeItEasyCustomization())))
{
}
}
注意:我无法编译您提供的测试。。然而,似乎你所要做的就是:
fixture.Inject(mockRepositoryFactory);
您可以尝试以下方法:
[Fact]
public void TestWithAutoFixtureImperatively()
{
// Fixture setup
var fixture = new Fixture()
.Customize(new AutoFakeItEasyCustomization());
var expectedRecord = fixture.Create<string>();
var boundArgOption = fixture.Create<BoundArgumentOption>();
var repositoryStub = A.Fake<IRepository>();
A.CallTo(() =>
repositoryStub
.Get(boundArgOption))
.Returns(expectedRecord);
var repositoryFactoryStub = A.Fake<IRepositoryFactory>();
A.CallTo(() =>
repositoryFactoryStub
.Create(boundArgOption))
.Returns(repositoryStub);
fixture.Inject(repositoryFactoryStub);
var sut = fixture.Create<HtmlOutputBuilder>();
// Exercise system
string result = sut.BuildReport(boundArgOption);
// Verify outcome
result.Should().Be(expectedRecord);
// Teardown
}
AutoDomainDataAttribute
定义为:
internal class AutoDomainDataAttribute : CompositeDataAttribute
{
internal AutoDomainDataAttribute()
: base(
new AutoDataAttribute(
new Fixture().Customize(
new AutoFakeItEasyCustomization())))
{
}
}
expectedHtmlContent
的值是多少?@NikosBaxevanis它不应该真的在乎expectedHmtlContent
的值是多少,但仅供参考,它实际上是一个Html字符串,我将写入一个文件。expectedHtmlContent
的值是多少?@NikosBaxevanis它不应该真的在乎expectedHmtlContent
仅供参考,它实际上是一个Html字符串,我将写入一个文件。提供的代码不可编译:)。我想去掉绒毛。已经说过,提供的代码是有效的:)。非常感谢你。我在任何地方都没有看到过详细的注入方法。有什么地方可以让我找到更多的信息吗?注射和冷冻有什么区别?这应该是一个单独的问题吗?不客气<代码>注入自定义夹具
实例,以始终返回相同的注入值Freeze
将为您创建值,然后它在内部调用Inject
。有关Inject
工作方式的详细信息,请参阅提供的代码,该代码不可编译:)。我想去掉绒毛。已经说过,提供的代码是有效的:)。非常感谢你。我在任何地方都没有看到过详细的注入方法。有什么地方可以让我找到更多的信息吗?注射和冷冻有什么区别?这应该是一个单独的问题吗?不客气<代码>注入自定义夹具
实例,以始终返回相同的注入值Freeze
将为您创建值,然后在内部调用Inject
。有关Inject
工作原理的详细信息,请访问