Beim Schreiben meines Tests habe ich einen statischen Visual Studio-Analysefehler festgestellt. Der folgende Code generiert CA1811 für beide Testmethoden FailCA
und PassCA
.Statische Analyse CA1811-Fehler bei Testmethoden mit Lambda-Ausdrücken
'ClassToTestTests.FailCA()' scheint keine Upstream-öffentlichen oder geschützten Anrufer zu haben. 'ClassToTestTests.PassCA()' scheint keine Upstream-öffentlichen oder geschützten Anrufer zu haben.
Code:
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));
}
}
Wenn ich Kommentar FailCA
oder Änderungscode davon so etwas wie dieses
[Test]
public void FailCA() {
value = null;
Throws<ArgumentNullException> (() => MethodToTest (value));
}
Dann verschwindet für beiden Methoden warnen. Es scheint also, dass () => MethodToTest (null)
etwas damit zu tun hat.
Irgendwelche Ideen, warum Warnungen für alle Methoden generiert werden?
Ihre Klasse ist intern, so dass die öffentlichen Funktionen nur innerhalb der Baugruppe aufgerufen werden können - aber dies wird nirgendwo gemacht, daher wird es als toter Code betrachtet - also die Warnung. – Aconcagua
@Aconcagua Ich weiß, was CA1811 bedeutet. Meine Frage ist, warum es nur generiert wird, wenn ich 'FailCA' Methode habe. Warnung wird nicht generiert, wenn ich diese Methode auszeichne. –
Wenn Sie es auskommentieren, gibt es keinen toten Code, also keine Warnung. Interessanter Teil macht es nicht statisch: Eine statische Methode ist unabhängig von Klasseninstanzen (und hat somit keine implizite Bedeutung). Es wird erwartet, dass eine solche statische Methode irgendwo innerhalb der Baugruppe aufgerufen wird, wenn sie nicht von außen zugänglich ist. Nicht-statische Methoden sind an die Existenz eines Objekts gebunden. Offensichtlich gibt es keine Überprüfung, ob solch eine Instanz jemals erzeugt wird, so dass eine Entscheidung, ob ein toter Code, auch nicht gemacht werden kann, also keine Warnung. – Aconcagua