ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

XUnit で Null のフロー解析が警告を出す問題に対処する

f:id:masatsuna:20211224085633p:plain

※本稿は 2021/12/8 時点の情報に基づいています。

2021 年 11 月は .NET のリリース祭り

Visual Studio 2022 とか C# 10 とか .NET 6 とか、 .NET 関連のリリースが 11 月に一気に押し寄せてきました。 手元のプロジェクトもいくつか .NET 6 への対応を始めているのですが、多くの新機能の中で最も役に立っている実感があるのが Null 許容参照型です。 何気なく書いていたコードの中に、 Null 参照になってしまう可能性があるコードって結構あるんだなーと。 お前がポンコツだからいけないんだろ、という話は置いといて。

XUnit と Null 許容参照型

そんな Null 許容参照型ですが、 XUnit の最新の安定板リリースである 2.4.1 では、 Null 許容参照型に対する考慮が入っていません。 テストプロジェクトで Null 許容参照型のフロー解析を使うと、いたるところで警告が出るはずです。

環境

検証

例えば以下の SampleMethod をリフレクションで探すようなテストを書いてみます。

public class SampleClass
{
    public void SampleMethod()
    {
    }
}

テストコードは以下のようになります。

public class MethodInfoTest
{
    [Fact]
    public void Test1()
    {
        var type = typeof(SampleClass);
        var methodInfo = type.GetMethod("SampleMethod");

        Assert.NotNull(methodInfo);
        Assert.Equal("SampleMethod", methodInfo.Name);
    }
}

このテストプロジェクトで Null 許容参照型のフロー解析を有効にしていると、 Xunit 2.4.1 ではフロー解析の警告が出ます。

f:id:masatsuna:20211224084505p:plain

Assert.NotNull で null ではないことが確定しているので、この警告はいやです。

解決策

Xunit 2.4.2-pre.12 にアップデートしましょう。 このバージョンからフロー解析のための属性がテストメソッドに付与されるようになっており、警告が出ないようになりました。

f:id:masatsuna:20211224084825p:plain

サンプルコード

サンプルコードは以下から参照できます。

github.com