NUnit Runner是否可以将对象传递给测试

时间:2019-09-12 13:38:25

标签: c# nunit-3.0

我已经构建了一个小的NUnit Test Runner,可以在主机系统(CAD)中作为插件运行。需要测试本身知道对象,只有测试插件才知道(主机系统的API对象)。这是必需的,因此测试可以将文件加载到cad并使用所需的文件进行一些测试。因此,我正在寻找一种解决方案,以将该应用程序对象传递给测试方法。

可以从测试插件中提供某种静态MyApplicationObjectProvider类,该类中填充了所需的应用程序对象。因此Test可以将此静态类称为对应用程序对象满意的对象。工作正常,但是然后我需要引用test-plugin-interface-assembly,这不是很好。我提供TestCaseSource时遇到同样的问题。 我想有可能通过TestContext中的参数或任何object类型的参数在测试方法中获取此应用程序对象。

测试程序集不应该知道Runner程序集或它们的接口程序集。

public MyRunner
{
    privat MyApplicationObject _myObject; // This object i need in the TestMethod!

    public void StartRunner()
    {
        // set up the options
        string path = Assembly.GetExecutingAssembly().Location;
        TestPackage package = new TestPackage(path);
        package.AddSetting("WorkDirectory", Environment.CurrentDirectory);

        // prepare the engine
        ITestEngine engine = TestEngineActivator.CreateInstance();
        var _filterService = engine.Services.GetService<ITestFilterService>();
        ITestFilterBuilder builder = _filterService.GetTestFilterBuilder();
        TestFilter emptyFilter = builder.GetFilter();

        using (ITestRunner runner = engine.GetRunner(package))
        {
            // execute the tests            
            XmlNode result = runner.Run(null, emptyFilter);
            lblTest.Text = result.InnerText;
        }
    }
}

[TestFixture]
public class TemplateTestClass
{
    [Test]
    public void TestMethod()
    {
        // how to get the object from MyRunner?
        MyApplicationObject myObject;
    }

    [Test, TestCaseSource( typeof( MyApplicationObjectProvider ), nameof( MyApplicationObjectProvider.Objects) )]
    public void TestWithCaseSource(MyApplicationObject myObject)
    {
        // how to get the object from MyRunner?
        MyApplicationObject myObject;
    }
}

0 个答案:

没有答案