Autofixtureを使用して親を構築するときに、子インスタンスのプロパティに固定値を割り当てることは可能ですか?チャームのように子インスタンスのすべてのプロパティにデフォルト値が追加されますが、子インスタンスのプロパティの1つに特定の値を上書きして割り当てたいと思います。
この親子関係を考えると:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
public int Number { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
}
アドレスインスタンスのCityプロパティに特定の値を割り当てたいと思います。私はこのテストコードの行で考えていました:
var fixture = new Fixture();
var expectedCity = "foo";
var person = fixture
.Build<Person>()
.With(x => x.Address.City, expectedCity)
.Create();
Assert.AreEqual(expectedCity, person.Address.City);
それは不可能です。反射の例外で
System.Reflection.TargetException : Object does not match target type.
... Autofixtureは、AddressインスタンスではなくPersonインスタンスのCityプロパティに値を割り当てようとします。
助言がありますか?
そして、はい、私は次のような余分なステップを追加できることを知っています:
var fixture = new Fixture();
var expectedCity = "foo";
// extra step begin
var address = fixture
.Build<Address>()
.With(x => x.City, expectedCity)
.Create();
// extra step end
var person = fixture
.Build<Person>()
.With(x => x.Address, address)
.Create();
Assert.AreEqual(expectedCity, person.Address.City);
...しかし、最初のバージョンまたは同様のもの(手順が少なく、簡潔)を望んでいました。
注:Autofixturev3.22.0を使用しています
質問を否定するわけではありませんが、最も簡単な解決策は実際には次のようになります。
[Fact]
public void SimplestThingThatCouldPossiblyWork()
{
var fixture = new Fixture();
var expectedCity = "foo";
var person = fixture.Create<Person>();
person.Address.City = expectedCity;
Assert.Equal(expectedCity, person.Address.City);
}
プロパティへの明示的な値の割り当ては、ほとんどの言語がすでに優れていることです(C#は確かに優れています)。したがって、AutoFixtureがその機能の半分を再現するために複雑なDSLを必要としないと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加