2017-06-30 4 views
0

にNullReference例外がスローされます。NUnitのCollectionOrderedConstraintは、だから私はC#でNUnitの3を使用してユニットテストのために次のコードを持ってnull以外の公共の読み取り専用フィールド

var skills = new[] 
{ 
    new Skill("aaaa"), //parameter is Name 
    new Skill("kkkk"), //parameter is Name 
    new Skill("zzzz"), //parameter is Name 
}; 

Assert.That(skills, Is.All.Not.Null); 

var skillNames = skills.Select(s => s.Name); 
Assert.That(skillNames, Is.All.Not.Null); 
Assert.That(skillNames, Contains.Item("aaaa")); 
Assert.That(skillNames, Contains.Item("kkkk")); 
Assert.That(skillNames, Contains.Item("zzzz")); 

Assert.That(skills, Is.Ordered.By("Name")); //Fails 

それはOrderedアサーションになると、それは失敗し、 NullReferenceException: Object reference not set to an instance of an object.CollectionOrderedConstraint.Matches(IEnumerable actual)からスローします。明らかに、値はnullではありません。これが正常に渡し、次の試験によって検証されています

var skillNames = new[] 
{ 
    new Skill("aaaa").Name, 
    new Skill("kkkk").Name, 
    new Skill("zzzz").Name, 
}; 

Assert.That(skillNames, Is.Ordered); //Passes 

私はこのテストも通過する際に問題が、By制約ではなく、知っている:

var characters = new[] 
{ 
    new Character { InterestingTrait = "aaaa" }, 
    new Character { InterestingTrait = "kkkk" }, 
    new Character { InterestingTrait = "zzzz" }, 
}; 

Assert.That(characters, Is.Ordered.By("InterestingTrait")); //Passes 

失敗間の私が知っている唯一の違いを合格していないケースでは、私たちがチェックしているフィールドは公開readonlyフィールドです。なぜnull参照例外がスローされますか? NUnitにこれに関する既知の問題はありますか?

+2

あなたは[MCVE]私たちは簡単に自分のためにそれを再現できるの形でこれを提供してもらえますか? –

答えて

1

メンバーがreadonlyであることは問題ではありません。フィールドでありプロパティではないという事実だけです。これを回避するには、あなたがNUnit documentation for CollectionOrderedConstraintを読めば、読み取り専用プロパティに

public string Name { get; } 

をあなたのフィールドを切り替える、またはあなただけの特性が記載されていることがわかりますBy(string propertyName)の署名を見てください。 NUnitはおそらくパブリックフィールドを処理するか、より良いエラーメッセージを出さなければならないので、私は問題を入力します。

更新:私は問題https://github.com/nunit/nunit/issues/2292に入っ

+0

これは実際にフィールドからプロパティに値を変更して問題を解決しました。ありがとう! – cidthecoatrack

関連する問題