使用 NUnit 引擎通过 Windows 表单应用程序执行 NUnit 测试

Executing NUnit tests through a Windows Form application with NUnit Engine

我正在尝试通过带有 NUnit 引擎的 Windows 表单应用程序执行 NUnit 测试,但我不明白如何为我的测试所在的 DLL 设置路径(我已经包含了参考资料中的 DLL)。当我点击一个按钮时,我希望测试开始;然而,NUnit 会打开然后立即关闭而不做任何事情。这是我拥有的:

namespace ATF.GUI
{
    public partial class ATF_Main : Form
    {
        TestPackage package;
        ITestEngine engine;

        public ATF_Main()
        {
            InitializeComponent();
        }

        private void ATF_Main_Load(object sender, EventArgs e)
        {
            string path = Assembly.GetExecutingAssembly().Location;
            package = new TestPackage(path);
            package.AddSetting("Working Directory", Environment.CurrentDirectory);

            // Prepare the engine
            engine = TestEngineActivator.CreateInstance();
        }

        private void btnStartTests_Click(object sender, EventArgs e)
        {
            using (ITestRunner runner = engine.GetRunner(package))
            {
                // Execute the tests 
                XmlNode result = runner.Run(null, TestFilter.Empty);
            }
        }

您正在将测试程序集设置为您的 gui 程序集。因为它没有测试,所以 NUnit 发现无事可做。我想 returns 结果有误。

不知何故,必须为您的应用程序提供测试程序集的路径。这可以通过命令行或某种对话框来实现。您可以查看 nunit3-console 或 nunit-gui 的代码,看看它是如何完成的。

对于打包的应用程序,您使用引用程序集的想法似乎有点奇怪。您的用户将需要拥有源代码并每次都重建它,引用所需的测试程序集。你真的想要那个吗?

如果你这样做,你将需要找到一些方法来获取该参考。没有什么不变的东西是很难做到的。

我从来没有得到真正的答案,但我自己想出来了。

private void ATF_Main_Load(object sender, EventArgs e)
    {
        // Add reference to tests DLL and load it here by name
        Assembly testAssembly = Assembly.Load("Program.Tests");
        package = new TestPackage(testAssembly.Location);
        package.AddSetting("Working Directory", Environment.CurrentDirectory);
    }

如果您有多个测试程序集,您还可以将程序集位置添加到列表中。