4

テストをAutoFixture 2.0に移植していますが、説明も修正もできない奇妙な動作に遭遇しました。この簡単なテストは私にとって失敗しています:

var autoFixtures = new Fixture();
var file = autoFixtures.Build<File>()
                       .With(f => f.Name, "bleh.txt")
                       .CreateAnonymous();

Assert.That(file.Name, Is.EqualTo("bleh.txt"));  // Fail?!

Nameの別のプロパティに変更すると、テストは成功します。これにより、 AutoFixture 1.0 を使用していたときに機能しなかったFile何らかのカスタマイズが存在すると考えられます。Nameただし、コードを精査しましたが、そのようなものは見つかりません。

トレースを有効にしてもあまり役に立たないようです。

autoFixtures.Behaviors.Add(new TracingBehavior());

ディスプレイなど:

Requested: System.String Name
    Requested: Ploeh.AutoFixture.Kernel.SeededRequest
    Created: Ploeh.AutoFixture.Kernel.NoSpecimen
  Requested: Ploeh.AutoFixture.Kernel.SeededRequest
    Requested: System.String
    Created: Ploeh.AutoFixture.Kernel.NoSpecimen
    Requested: System.String
    Created: 8a022fda-fa4e-49b7-b0c2-285fef765386
  Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386
Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386

FWIWNameは、 の基本クラスの仮想プロパティとして宣言され、次のようFileにオーバーライドされFileます。

public abstract class Item
{
    public virtual string Name { get; set; }
    ...
}

public class File : Item
{
    public override string Name { get; set; }
    ...
}

私が試すかもしれない何か、またはNameプロパティの動作をうっかりカスタマイズしてしまった可能性がある場所について誰かがアイデアを持っている場合は、非常に感謝しています!

4

1 に答える 1

5

AutoFixture 2.0 にバグが見つかりました。私はそれを解決し、変更をレポジトリ (changeset 3efe812aecd1) にプッシュしたので、最新のソースをダウンロードしてコンパイルすると動作するはずです。

興味がある場合は、仮想プロパティが子クラスによってオーバーライドされることに関連していました。明らかに、私が頻繁に行うことではありません。

バグについて申し訳ありません。問題が解決しない場合、または他にご不明な点がある場合はお知らせください。

于 2011-01-10T22:02:51.050 に答える