Autofixtureを使用して子インスタンスのプロパティ値を固定値に設定する

イェンス・アンドレセン

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]

編集
0

コメントを追加

0

関連記事

分類Dev

2つの数値変数を使用してインスタンスプロパティを設定する方法

分類Dev

文字列の値に基づいてインスタンスのプロパティを設定する方法は?

分類Dev

インターフェイス プロパティに値を設定する

分類Dev

インターフェイス内の別のプロパティの値に基づいてプロパティ名を設定します

分類Dev

クラスのインスタンス化後のプロパティ値として非同期値を設定する

分類Dev

データバインディングを使用してプロパティ値に基づいて、DataGridの行の背景を設定する方法

分類Dev

C#文字列を使用して保存されたプロパティ設定に基づいてコンボボックスの値を設定する方法

分類Dev

テンプレートを使用してCSSスタイルのプロパティを設定する

分類Dev

スタイルを設定するインスタンスのプロパティからStyleの値を取得します

分類Dev

Angularのコンストラクターをどのように使用してプロパティの値を設定しますか?

分類Dev

値のリストを使用してエンティティ プロパティを定義する方法

分類Dev

プロパティファイルのプロパティの値を使用してファイルのインスタンスを作成する

分類Dev

Angular:いくつかのプロパティの値に基づいてスタイルを設定する方法

分類Dev

[エンティティの作成]で、外部ソースからのプロパティ値を設定して、それが持続するようにします

分類Dev

XAMLで文字列以外のタイプを使用してカスタムプロパティ値を設定する方法[Xamarin.Forms]

分類Dev

パブリックインスタンスでgetterとsetterを使用してそのクラスのプライベートインスタンスを設定するときに設定されるクラスインスタンスのプロパティはどれですか?

分類Dev

thisポインタjqueryを使用して要素のプロパティと子にアクセスする方法は?

分類Dev

角度/タイプスクリプトの別の関数を使用してインターフェイスプロパティに値を割り当てますか?

分類Dev

基本クラスのインスタンスに派生クラスのプロパティを設定します

分類Dev

クラスプロパティをインスタンス変数のデフォルト値として定義するのは慣用的ですか

分類Dev

Pythonプロパティは、コンストラクターで値を設定するときにセッターを使用しません

分類Dev

タイプから名前でプロパティを取得し、C#のリフレクションを使用してプロパティ値を設定するにはどうすればよいですか?

分類Dev

JQueryを使用してスパンの値を設定する方法

分類Dev

式を使用してインデクサーのプロパティ値を設定するにはどうすればよいですか?

分類Dev

インスタンスプロパティを静的プロパティに設定する

分類Dev

コンストラクター呼び出しでプロパティの値を設定すると、JsonPropertyでどのように機能しますか?

分類Dev

Objective-Cのプロパティとしてカスタム構造体の値を設定する

分類Dev

Angularのスタイルプロパティとして、補間された値を設定するにはどうすればよいですか?

分類Dev

ボタンをクリックすると、JavaScriptを使用してテキストフィールドの値をゼロに設定します

Related 関連記事

  1. 1

    2つの数値変数を使用してインスタンスプロパティを設定する方法

  2. 2

    文字列の値に基づいてインスタンスのプロパティを設定する方法は?

  3. 3

    インターフェイス プロパティに値を設定する

  4. 4

    インターフェイス内の別のプロパティの値に基づいてプロパティ名を設定します

  5. 5

    クラスのインスタンス化後のプロパティ値として非同期値を設定する

  6. 6

    データバインディングを使用してプロパティ値に基づいて、DataGridの行の背景を設定する方法

  7. 7

    C#文字列を使用して保存されたプロパティ設定に基づいてコンボボックスの値を設定する方法

  8. 8

    テンプレートを使用してCSSスタイルのプロパティを設定する

  9. 9

    スタイルを設定するインスタンスのプロパティからStyleの値を取得します

  10. 10

    Angularのコンストラクターをどのように使用してプロパティの値を設定しますか?

  11. 11

    値のリストを使用してエンティティ プロパティを定義する方法

  12. 12

    プロパティファイルのプロパティの値を使用してファイルのインスタンスを作成する

  13. 13

    Angular:いくつかのプロパティの値に基づいてスタイルを設定する方法

  14. 14

    [エンティティの作成]で、外部ソースからのプロパティ値を設定して、それが持続するようにします

  15. 15

    XAMLで文字列以外のタイプを使用してカスタムプロパティ値を設定する方法[Xamarin.Forms]

  16. 16

    パブリックインスタンスでgetterとsetterを使用してそのクラスのプライベートインスタンスを設定するときに設定されるクラスインスタンスのプロパティはどれですか?

  17. 17

    thisポインタjqueryを使用して要素のプロパティと子にアクセスする方法は?

  18. 18

    角度/タイプスクリプトの別の関数を使用してインターフェイスプロパティに値を割り当てますか?

  19. 19

    基本クラスのインスタンスに派生クラスのプロパティを設定します

  20. 20

    クラスプロパティをインスタンス変数のデフォルト値として定義するのは慣用的ですか

  21. 21

    Pythonプロパティは、コンストラクターで値を設定するときにセッターを使用しません

  22. 22

    タイプから名前でプロパティを取得し、C#のリフレクションを使用してプロパティ値を設定するにはどうすればよいですか?

  23. 23

    JQueryを使用してスパンの値を設定する方法

  24. 24

    式を使用してインデクサーのプロパティ値を設定するにはどうすればよいですか?

  25. 25

    インスタンスプロパティを静的プロパティに設定する

  26. 26

    コンストラクター呼び出しでプロパティの値を設定すると、JsonPropertyでどのように機能しますか?

  27. 27

    Objective-Cのプロパティとしてカスタム構造体の値を設定する

  28. 28

    Angularのスタイルプロパティとして、補間された値を設定するにはどうすればよいですか?

  29. 29

    ボタンをクリックすると、JavaScriptを使用してテキストフィールドの値をゼロに設定します

ホットタグ

アーカイブ