NUnit扩展

Igo*_*gor 5 nunit nunit-2.5

大家好我有一个关于NUnit Extension(2.5.10)的问题.我想要做的是将一些额外的测试信息写入数据库.为此,我使用事件监听器创建了NUnit扩展.我遇到的问题是在运行时调用public void TestFinished(TestResult result)方法两次.写入数据库的代码是在这个方法中,这使我在数据库中有重复的条目.问题是:这是预期的行为吗?我可以做些什么吗?扩展代码如下.谢谢.

using System;
using NUnit.Core;
using NUnit.Core.Extensibility;

namespace NuinitExtension
{
[NUnitAddinAttribute(Type = ExtensionType.Core,
                     Name = "Database Addin", 
                     Description = "Writes test results to the database.")]
public class MyNunitExtension : IAddin, EventListener
{
    public bool Install(IExtensionHost host)
    {
        IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
        if (listeners == null)
            return false;

        listeners.Install(this);
        return true;
    }

    public void RunStarted(string name, int testCount){}
    public void RunFinished(TestResult result){}
    public void RunFinished(Exception exception){}
    public void TestStarted(TestName testName){}

    public void TestFinished(TestResult result)
    {
        // this is just sample data
        SqlHelper.SqlConnectAndWRiteToDatabase("test", test", 
                                               2.0, DateTime.Now);
    }

    public void SuiteStarted(TestName testName){}
    public void SuiteFinished(TestResult result){}
    public void UnhandledException(Exception exception){}
    public void TestOutput(TestOutput testOutput){}
}
Run Code Online (Sandbox Code Playgroud)

}

Igo*_*gor 1

我已经通过简单地从 NUnit 2.5.10\bin\net-2.0\addins 文件夹中删除我的扩展程序集来解决这个问题。目前一切都按预期进行,但我不确定如何。我认为你必须在 addins 文件夹中包含扩展/插件程序集。我通过 NUnit.exe 打开解决方案来运行测试。我的扩展项目是我正在测试的解决方案的一部分。我也向 NUnit 人员提出了这个问题,并得到了以下解释:

最有可能的是,您的插件被加载了两次。为了更容易测试插件,NUnit 除了搜索插件目录之外,还搜索每个测试程序集以查找要加载的插件。通常,当您确信您的插件可以工作时,您应该将其从测试程序集中删除并将其安装在插件文件夹中。这使得它可用于使用 NUnit 运行的所有测试。OTOH,如果您真的只想让插件应用于某个项目,那么您可以将其保留在测试程序集中,而不是将其安装为永久插件。 http://groups.google.com/group/nunit-discuss/browse_thread/thread/c9329129fd803cb2/47672f15e7cc05d1#47672f15e7cc05d1