我已经构建了一个小的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;
}
}