1

だから私はこのシナリオをセットアップしました:

private void InitializeTestProperties()
{
    SetTestPropertiesRecur(mTestRunner.Test, "Show", true);
    VerifyPropertiesRecur(mTestRunner.Test, "Show");
}

「mTestRunner」にロードされたすべてのテストが、「true」に設定された ITest によって提供されるディクショナリに格納されたプロパティ「Show」を持つことを期待しています。

このコードが実行されると、ITest の "Properties" フィールドに正しい値が設定されているように見えます。

private void SetTestPropertiesRecur(ITest test, object key, object val)
{
    test.Properties[key] = val;
    Console.WriteLine(test.TestName.FullName + ": " + test.Properties[key]); // works
    if (test.IsSuite)
    {
        foreach (ITest child in test.Tests)
        {
            SetTestPropertiesRecur(child, key, val);
        }
    }
}

しかし、別の関数で確認しようとすると、「プロパティ」フィールドが再度設定されません。

private void VerifyPropertiesRecur(ITest test, object key)
{
    Console.WriteLine(test.TestName.FullName + ": " + test.Properties[key]); // does not print the right value. "test.Properties[key]" has nothing associated with it for all tests.
    if (test.IsSuite)
    {
        foreach (ITest child in test.Tests)
        {
            VerifyProperties(child, key);
        }
    }
}

要約すると、ITest の "Properties" フィールドに加えられた変更は、関数呼び出し間で保持されません。なんで?変更を永続化するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

さて、ITest のアセンブルを調べたところ、「Properties」フィールドが読み取り専用属性であることがわかりました。

using System;
using System.Collections;
namespace NUnit.Core
{
    public interface ITest
    {
        TestName TestName
        {
            get;
        }
        string TestType
        {
            get;
        }
        RunState RunState
        {
            get;
            set;
        }
        string IgnoreReason
        {
            get;
            set;
        }
        int TestCount
        {
            get;
        }
        IList Categories
        {
            get;
        }
        string Description
        {
            get;
            set;
        }
        IDictionary Properties
        {
            get;
        }
        bool IsSuite
        {
            get;
        }
        ITest Parent
        {
            get;
        }
        IList Tests
        {
            get;
        }
        int CountTestCases(ITestFilter filter);
    }
}

謎解き!

于 2013-03-02T02:47:04.517 に答える