[英]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.