Nunit-C#:通过编码运行特定测试

Nunit-C#:通过编码运行特定测试,c#,nunit,C#,Nunit,我将Selenium与C#一起用于自动化,我希望通过以下代码调用NUnit: CoreExtensions.Host.InitializeService(); TestPackage testPackage = new TestPackage(@"D:\Automation\bin\Debug\Test.dll"); RemoteTestRunner remoteTestRunner = new RemoteTestRunner(); remoteTestRunner.Load(testPack

我将Selenium与C#一起用于自动化,我希望通过以下代码调用NUnit:

CoreExtensions.Host.InitializeService();
TestPackage testPackage = new TestPackage(@"D:\Automation\bin\Debug\Test.dll");
RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
remoteTestRunner.Load(testPackage);
//TestFilter filter = new NameFilter(new TestName() { Name = "Test1" });
TestResult testResult = remoteTestRunner.Run(
    new NullListener(),
    TestFilter.Empty,
    false,
    LoggingThreshold.Off
); 
我能够使用类别过滤器运行测试,如下所示

remoteTestRunner.Run(
    new NullListener(),
    new CategoryFilter("MyCat"),
    false,
    LoggingThreshold.Off
);
但我想执行特定的测试。如何设置套件过滤器?我尝试了以下方法,但无效:

TestFilter filter = new NameFilter(new TestName() { Name = "Test1" }); 
TestResult testResult = remoteTestRunner.Run(
    new NullListener(),
    filter,
    false,
    LoggingThreshold.Off
);

如何运行特定测试以及如何通过代码传递参数?

此示例代码应该让您了解如何开始循环测试并选择要运行的测试。我使用了几个数组索引0,您应该在其中循环

它的Jist是,在您开始尝试单独运行测试之前,您必须实际加载测试,因为测试需要有一个唯一的TestId,只有在加载测试之后才能设置它。下面的代码在测试框架的第一个testfixture中工作并运行第一个测试。它还会扫描所有测试名称,以便根据某些条件显示或运行

CoreExtensions.Host.InitializeService();
TestSuiteBuilder builder = new TestSuiteBuilder();
TestPackage testPackage = new TestPackage(@"path.to.dll");
RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
remoteTestRunner.Load(testPackage);
TestSuite suite = builder.Build(testPackage);
TestSuite test = suite.Tests[0] as TestSuite;
var numberOfTests = ((TestFixture)test.Tests[0]).TestCount;

foreach (TestMethod t in ((TestFixture)test.Tests[0]).Tests)
{
    Console.WriteLine(t.TestName.Name);
}

TestName testName = ((TestMethod)((TestFixture)test.Tests[0]).Tests[0]).TestName;
TestFilter filter = new NameFilter(testName);
TestResult result = test.Run(new NullListener(), filter);
ResultSummarizer summ = new ResultSummarizer(result);
Assert.AreEqual(1, summ.ResultCount);

这是我的工作代码

    SimpleNameFilter filter = new SimpleNameFilter()

    foreach (DataRow DR in DT.Rows)
    {
    string Test = "FullNameOftheTest";
    filter.Add(Test); 
    }

  CoreExtensions.Host.InitializeService();
  TestPackage testPackage = new TestPackage(@"D:\Test\Test.dll");
  RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
  remoteTestRunner.Load(testPackage);
  TestResult result = remoteTestRunner.Run(new NullListener(), filter, true,          LoggingThreshold.All);
  ResultSummarizer summaryResults = new ResultSummarizer(result);
感谢大家的支持,
kishore。

有什么解决方案吗?如果NUnit无法解决此问题,请向我推荐替代方案。您是否知道如何使用TestName筛选器来解决此问题?我也在尝试同样的方法,但结果总是不确定?做了个梦,谢谢。我现在也可以查看结果并报告失败的原因等。嗨@ED-209,谢谢你的回复。我使用下面的代码来执行选定的测试,它可以工作,但是,测试执行的次数比前面提到的要多。SimpleNameFilter过滤器=新的SimpleNameFilter();foreach(DT.Rows中的DataRow DR){string Test=…;filter.Add(Test);}CoreExtensions.Host.InitializeService();TestPackage TestPackage=新的TestPackage(@“…dll”);RemoteTestRunner RemoteTestRunner=新的RemoteTestRunner();加载(testPackage);TestResult=remoteTestRunner.Run(new NullListener(),filter,true,loggingsthreshold.All);请给出执行所选测试的方式,所选次数。提前谢谢。@kishoreddy首先我使用了一个名称过滤器,它接受一个TestName对象。其次,我通过TestMethod对象运行测试,而不是RemoteTestRunner。我并不是说这是不可能的,但我知道这是有效的,因为这是我们用来运行单个测试的方法(如果必要的话不止一次)。我相信我们首先尝试了你的方式,然后遇到了所有的测试,结果都是“不确定的”@Kishorereddy很高兴听到你的测试正在工作,因为事实上它们正在执行多次。这可能是因为在多个特性或套件中使用了相同的测试名称吗?也许努尼特不知道该选哪一个。我以前没有遇到过这个问题,所以我真的不知道为什么会发生这种情况。我假设DataRow只是一个字符串测试名称的列表,可能这里有一些重复?这些东西有NUnit记录的吗?我想自己实现类似的东西,但我更希望RTFM能看到哪些选项对我开放。我们不记录它,因为这些都是内部方法,随着版本的变化而变化。NUnit总是因为缺少一个发布的API来运行测试而遭受痛苦。NUnit3.0提供了这样一个API。粗略的文档可在上获得,完成后将移至下。