【发布时间】:2013-01-08 04:02:30
【问题描述】:
大家好,我有一个关于 NUnit 扩展 (2.5.10) 的问题。 我想做的是向 数据库。为此,我使用 Event 创建了 NUnit 扩展 听众。 我遇到的问题是公共无效 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){}
}
}
【问题讨论】:
-
我认为
TestFinished每次测试至少会被调用一次。你只运行一个测试吗?如果您是,那么可能会为夹具调用一次TestFinished,并为测试方法调用一次。我很长时间没有查看 NUnit 代码,所以我不能 100% 确定。您应该可以通过检查传入的TestResult上的属性来判断。 -
谢谢迈克,我正在运行多个测试,我确实想记录每一个测试,但只记录一次,相反,我为每个测试获得两个条目。而且我认为这个特定的方法只会为每个测试运行一次,SuiteStarted 将为每个 TestFixture 运行。
-
套件不同。有一种设置套件的显式方法。我从不使用它,所以我不知道怎么用了。
TestResult遵循复合模式。所以它可能是测试或夹具或整个测试运行的结果。令我惊讶的是,一次测试调用了两次。会不会安装了两次? -
它没有安装两次,只是检查了一下。我刚刚尝试使用以下设置运行测试:[Setup]、[Teardown]、[Test] 和 TestFinished 再次被调用两次,原因不明。