簡體   English   中英

C# 是否可以在 ASP.Net 中運行 nunit 測試?

[英]C# Is it possible to run nunit tests inside ASP.Net?

我有一個非常簡單的問題。

是否可以在 asp.net web 應用程序中運行 Nunit 測試?

這是一個示例項目:

  • MyApp -> ASP.Net 應用程序 (.net5)
  • MyTests -> Nunit 測試 (.net5)

我的 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 並且引擎將與其通信,告訴它運行您的測試。

這可能會以以下兩種方式之一失敗:

  1. 您可能沒有創建流程的權限。

  2. 如果創建成功,代碼肯定不會在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM