8

テスト ケースを含む nunit クラス ライブラリがあります。ライブラリ内のすべてのテストのリスト、主にテスト名とそのテスト ID をプログラムで取得したいと考えています。これが私がこれまでに持っているものです:

var runner = new NUnit.Core.RemoteTestRunner();
runner.Load(new NUnit.Core.TestPackage(Request.PhysicalApplicationPath + "bin\\SystemTest.dll"));
var tests = new List<NUnit.Core.TestResult>();
foreach (NUnit.Core.TestResult result in runner.TestResult.Results)
{
    tests.Add(result);
}

問題は、実際にテストを実行するまで runner.TestResult が null であることです。この時点でテストを実行したくないのは明らかです。ライブラリにあるテストのリストを取得したいだけです。その後、ユーザーがテストを選択して個別に実行できるようにし、テスト ID を RemoteTestRunner インスタンスに渡します。

では、実際にすべてのテストを実行せずに、テストのリストを取得するにはどうすればよいでしょうか?

4

3 に答える 3

6

リフレクションを使用してアセンブリをロードし、すべてのテスト属性を探すことができます。これにより、テスト メソッドであるすべてのメソッドが得られます。後は君しだい。

リフレクションを使用して型の属性を取得する方法についての msdn の例を次に示します。 http://msdn.microsoft.com/en-us/library/z919e8tw.aspx

于 2012-05-23T17:05:20.860 に答える
4

テスト クラス ライブラリ アセンブリからすべてのテスト名を取得するコードを次に示します。

//load assembly.
            var assembly = Assembly.LoadFile(Request.PhysicalApplicationPath + "bin\\SystemTest.dll");
            //get testfixture classes in assembly.
            var testTypes = from t in assembly.GetTypes()
                let attributes = t.GetCustomAttributes(typeof(NUnit.Framework.TestFixtureAttribute), true)
                where attributes != null && attributes.Length > 0
                orderby t.Name
                    select t;
            foreach (var type in testTypes)
            {
                //get test method in class.
                var testMethods = from m in type.GetMethods()
                                  let attributes = m.GetCustomAttributes(typeof(NUnit.Framework.TestAttribute), true)
                    where attributes != null && attributes.Length > 0
                    orderby m.Name
                    select m;
                foreach (var method in testMethods)
                {
                    tests.Add(method.Name);
                }
            }
于 2012-05-23T18:04:08.470 に答える