0

Nunit の TestCase を Flag'd Enum で動作させようとしています:

[NUnit.Framework.TestCase(Framework.Environments.HD3 | Framework.Environments.BizTalk, "Test","Test")]
        public void SimpleTest(Framework.Environments environment, string org, string source)
        {
            environment = Framework.Environments.BizTalk| Framework.Environments.HI5;
            ....

テストの最初の行は、値が適切に設定されているかどうかを確認することです-機能します。ただし、TestCase は Enum を設定しません。HIALUnSecured ではなく、HD3 を取得します。

これが私の Enum の作成方法です。

    [Flags]
    public enum Environments
    {
        HD3 = 0,
        HD1 = 1 << 0,
        HD2 = 1 << 1,
        HD4 = 1 << 2,

これを機能させる方法について何か考えはありますか?はい、4 番目の変数を使用できますが、何が起こっているのかを知りたいと思っています。

アップデート

さらに調査したところ、Nunit が問題である可能性があることがわかりました。

    [TestCase("test", "test")]
    public void test(string a, string b)
    {
        System.Diagnostics.Debug.Write("===============" + a + b);
    }

メソッド内: a と b を null として。

それは私のNUnitに関係している可能性が最も高いので、少し掘り下げる必要があります。

Update 2 TestDriven.NET が原因だったようです。意図したとおりに機能していませんでした。TestDriven を更新したところ、完全に機能しました。

4

3 に答える 3

2

NUnit は間違いなくテスト ケースに null を渡しません: もしそうなら、NUnit 自身のテストは失敗し、人々からそれについて聞いていたでしょう!

テストを実行するために、NUnit 独自のランナー以外のものを使用している可能性があります。そうですか?

于 2013-07-12T16:50:10.480 に答える
2

がフラグ可能な値であると仮定して、フラグ宣言を変更する必要HD3があります。

public enum Environments
{
    None = 0,
    HD1 = 1 << 0, // 1
    HD2 = 1 << 1, // 2
    HD3 = 1 << 2, // 4  
    HD4 = 1 << 3, // 8

    // etc.
}

あなたの最初の例ではFramework.Environments.HD3 | Framework.Environments.BizTalk、 がゼロであると仮定すると、ゼロで論理和されたものは他のオペランドの値であるHD3ため、単に書くことと同等です。Framework.Environments.BizTalk

説明したとおりに機能することを証明するための単体テストを次に示します。

[TestFixture]
class EnumFlagsTests
{
    [Test]
    [TestCase(Environments.HD1 | Environments.HD3)]
    public void ShouldBeTrue(Environments input)
    {
        // arrange
        Environments expectedEnum = (Environments.HD1 | Environments.HD3);
        int expectedNumericalValue = 5;

        // assert
        Assert.AreEqual(expectedEnum, input);
        Assert.AreEqual(expectedNumericalValue, (int)input);
    }
}

[Flags]
public enum Environments
{
    None = 0,
    HD1 = 1 << 0, // 1
    HD2 = 1 << 1, // 2
    HD3 = 1 << 2, // 4  
    HD4 = 1 << 3, // 8

    // etc.
}
于 2013-07-12T00:12:27.303 に答える
0

TestDriven.NET が原因でした。うまくいったアップグレード。

于 2013-07-15T16:20:35.277 に答える