テストの書き込み中に奇妙なVisual Studio静的解析エラーが発生しました。コードは両方のテスト方法FailCA
とPassCA
の両方にCA1811を生成します。静的解析ラムダ式を使用したテストメソッドのCA1811エラー
'ClassToTestTests.FailCA()'には、上方向の公開者または保護された呼び出し元がないようです。 'ClassToTestTests.PassCA()'には、上方向のパブリックまたは保護された呼び出し元がないようです。
コード:
using System;
using NUnit.Framework;
using static Namespace.ClassToTest;
using static NUnit.Framework.Assert;
namespace Namespace {
public static class ClassToTest {
public static object MethodToTest (object value) => value;
}
[TestFixture]
internal sealed class ClassToTestTests {
private object value = new object();
[Test]
public static void FailCA() => Throws<ArgumentNullException> (() => MethodToTest (null));
[Test]
public void PassCA() => Throws<ArgumentNullException> (() => MethodToTest (value));
}
}
私はその後両方方法のため。消える警告この
[Test]
public void FailCA() {
value = null;
Throws<ArgumentNullException> (() => MethodToTest (value));
}
のようなものへのFailCA
または変更のコードをコメントした場合。だから、() => MethodToTest (null)
にはこれと関係があります。
すべての方法で警告が生成される理由はありますか?
あなたのクラスは内部クラスなので、パブリック関数はアセンブリ内からのみ呼び出すことができますが、これはどこでも行われないため、デッドコードとみなされます。 – Aconcagua
@Aconcagua CA1811の意味は分かっています。私の質問は、私が 'FailCA'メソッドを持っているときにだけ生成される理由です。そのメソッドをコメントアウトすると、警告は生成されません。 –
コメントアウトすると、デッドコードがないので、警告は表示されません。興味深い部分は非静的にしています:静的メソッドは、どのクラスインスタンスからも独立しています(したがって、暗黙のthisはありません)。このような静的メソッドは、外部からアクセスできない場合はアセンブリ内のどこかで呼び出されることが期待されます。非静的メソッドは、オブジェクトの存在に結びついています。明らかに、そのようなインスタンスが作成されたかどうかはチェックされていないため、デッドコードの場合は決定もできないため、警告は表示されません。 – Aconcagua