2012-03-23 8 views
6

警告がAssertステートメントの中にあるときだけ、警告を完全に無効にしたくありません。無視する方法任意のNull参照Assertステートメントを使用する場合の例外の警告?

私は次の2行

var someObject = GetObject(); 
Assert.IsNotNull(someObject, "someObject should not be null"); 
Assert.AreEqual(expectedValue, someObject.SomeProperty); 

を持っているのであれば、たとえば、私はsomeObject.SomeProperty上の2行目の可能なnull参照の警告を取得します。 Assert.AreEqualのように、特定のコール内にあるときに警告を無効にすることはできますか?

これは多くの単体テストで問題になるため、私はReSharperの無効化コードでテストを捨てるつもりはありません。

今私は考えることができる唯一のオプションは、この種のは、最初の場所でAssert.IsNotNullを持つことの目的を倒すと思われるが

var someObject = GetObject(); 
if(someObject == null) 
{ 
    Assert.Fail("someObject is null"); 
    return; 
} 

するすべてのAssert.IsNotNullの呼び出しを変更することです。より良い方法があるかどうか疑問に思うだけです。

+0

:http://stackoverflow.com/questions/4393456/resharper-how-to-remove-possible-system-nullreferenceexception-warning – JYelton

+0

することができます完全な例を投稿しますか?私はこれを再現することはできません。 NUnitのアサーションライブラリを使用すると、Assert.IsNotNullを追加すると警告が削除され、テスト中かどうかが影響しません。 –

+0

@JamesWorld、私はMBUnitを使っていますが、違いがあるかどうかは分かりません。私が掲示したコードは、MBUnit 2.4.2とReSharper 6.1を使って警告を出しています。私はそれがテストに入っているかどうかは関係ありませんが、私はテストクラスでそれを無効にすることに関心があります。それ以外は有効にする必要があります。 – Brandon

答えて

0

私が誤解していない場合は、nullがforeachオブジェクトにチェックされていないときにresharperが警告を出します。テストクラスでnull警告を出さないようにresharperルールを変更できます。 Hereは、テストメソッドのReSharper命名スタイルを変更するためのリンクです。

+0

あなたはそれぞれを1つの単語として書き始めるときに、あまりにも多くのプログラムを知っています。 :)あなたはこれを行う方法についてのステップを提供できますか?どのようにしてResharperにテストクラスを考えるべきか教えてください。 – Brandon

+0

@Brandonあなたは私の笑顔を作った:)見てみてください。 http://atombrenner.blogspot.com/2010/07/how-to-change-resharper-naming-style.html – daryal

+0

-1私はあなたが間違っていると思います。警告の外観は、テストクラスに固有のものではありません。 –

0

MBUnitではなくNUnitを使用します。 NUnitのAssert.IsNotNull()の実装は、MBUnitがnullではないことを保証するものとして取り上げられています。

+0

もちろんこれはおそらくあなたの場合はあまり実用的ではありません。 –

+1

Assert.That(結果、Is.Not.Null)を保証する方法は? – labilbe

1

あなたはR#外部を使用することができ、私はあなたが使用して、特定のライブラリを知らないが、私は

Assert.IsTrue(someObject != null); 

または、完全を期すためのようなものを試してみた、

Assert.IsNotNull(someObject, "someObject must not be null"); 
Assert.IsNotNull(someObject.SomeProperty, "SomeProperty must not be null either"); 
Assert.SomethingElse(...); 
+0

お返事ありがとうございますが、問題は引き続き存在します。私がオブジェクトを主張し、プロパティがnullでない場合でも、警告は気にせず、警告を与えます。警告は 'object == null'を実行してメソッドから戻った場合にのみ消えます。 – Brandon

+0

@Brandon好奇心の中で、警告にもかかわらず、テストは合格し、期待通りに失敗しますか? – Alex

+0

はい。これはニッキーピッキーの問題です。私はちょうど、ワイドな検査が、実際には警告ではないはずの警告の束で満たされているのが好きではありません。これは実際のコードやテストなどには影響しません。 – Brandon

1

は、あなたのプロジェクトにこれを追加します。

public static class AssertionsExtensions 
{ 
    [NotNull] 
    public static TSubject ShouldNotBeNull<TSubject>([CanBeNull] this TSubject source, 
     [CanBeNull] string because = "", [CanBeNull] [ItemCanBeNull] params object[] reasonArgs) 
    { 
     source.Should().NotBeNull(because, reasonArgs); 

     // ReSharper disable once AssignNullToNotNullAttribute 
     return source; 
    } 
} 

次に例えば、このようにそれを使用します。

  // Assert 
      succeeded.Should().Be(true, "<USB loopback cable must be connected and COM port must be correct.>"); 
      DeviceStatus deviceStatusNotNull = testRunner.Result.ShouldNotBeNull(); 
      deviceStatusNotNull.DeviceAddress.Should().Be(deviceAddress); 
      deviceStatusNotNull.IsInNetwork.Should().Be(true); 
0

あなたはパラメータがnullの場合、実行が停止して示すためにContractAnnotationsを使用することができます。 jetbrains contract annotationsを参照してください。サンプルクラス:

public static class FluentExtensions 
{ 
     //see: https://www.jetbrains.com/help/resharper/2017.3/Contract_Annotations.html 
     [ContractAnnotation("null => stop")] 
     public static void ShouldNotBeNull(this object objToTest) 
     { 
      objToTest.Should().NotBeNull(); 
     } 

} 

使用法:

関連
doc.ShouldNotBeNull(); 
doc.Content.ShouldNotBeNull(); 
関連する問題