[英]C# Is it possible to run nunit tests inside ASP.Net?
我有一个非常简单的问题。
是否可以在 asp.net web 应用程序中运行 Nunit 测试?
这是一个示例项目:
我的 Asp.net 项目( MYApp
)包含我所有的控制器等,依赖于NUnit.Engine
和我的测试项目。 还有另一个测试项目( MyTests
),它只是一个虚拟项目。
我希望能够在 controller 中运行,在我的 web 应用程序中,我的测试。
示例 controller:
namespace MyApp.Controllers
{
[Route("api/tests")]
[ApiController]
public class TestController: ControllerBase
{
// Some helper class to verify everything is working somehow
private class ReportListener : ITestEventListener
{
public void OnTestEvent(string report)
{
Console.WriteLine(report);
}
}
[HttpGet]
public async Task<ActionResult> Trigger()
{
try
{
using ITestEngine engine = TestEngineActivator.CreateInstance();
engine.Initialize();
engine.WorkDirectory = Path.Combine(Directory.GetCurrentDirectory(), "../","MyTests/");
// Create a simple test package - one assembly, no special settings
TestPackage package = new TestPackage(@".\bin\Debug\net5.0\MyTests.dll"); //Just for debugging and testing
// Get a runner for the test package
using ITestRunner runner = engine.GetRunner(package);
runner.Load();
// Run all the tests in the assembly
XmlNode testResult = runner.Run(listener: new ReportListener(), TestFilter.Empty);
var outputs = Enumerable.Empty<string>();
foreach (XmlNode elem in testResult.SelectNodes("//test-case/output"))
{
outputs = outputs.Append(elem.InnerText);
}
}catch(Exception e)
{
}
return Ok();
}
}
}
但不幸的是,到目前为止,我所有的尝试都失败了。
我错过了什么吗? Nunit.Engine 不是在 asp.net 上下文中运行吗?
我在 .NET5.0 中构建所有这些(公司政策)
如果需要,我可以提供一个示例项目
可能还有更多,但一件小事可以解释失败......
NUnit 引擎默认在它启动的单独进程中运行测试。 因此,假设您的代码按照编写的方式正常工作,将创建一个 ProcessRunner 并且引擎将与其通信,告诉它运行您的测试。
这可能会以以下两种方式之一失败:
您可能没有创建流程的权限。
如果创建成功,代码肯定不会在 asp.net 上下文中运行。 在这种情况下,它可能会出错并在提供的调试信息很少的情况下终止。
一个简单的修复方法是向测试 package 添加一个设置,告诉引擎运行正在进行的测试。
TestPackage package = new TestPackage(@".\bin\Debug\net5.0\MyTests.dll");
package.AddSetting("ProcessModel", "InProcess");
如果您在执行此操作后遇到第二个错误,它至少应该会产生更清晰的消息,并且您应该能够通过代码进行调试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.