gpt4 book ai didi

c# - 多次记录(或运行)单元测试

转载 作者:太空狗 更新时间:2023-10-29 17:52:39 25 4
gpt4 key购买 nike

我有这个简单的测试:

protected readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().ReflectedType);
private static int count = 0;
[Test]
public void TestConfiguredSuccessfully()
{
logger.Debug("in test method" + count++);
}

log4net 是这样设置的:

[TestFixtureSetUp]
public void SetUp()
{
log4net.Config.BasicConfigurator.Configure();
}

问题是,如果我在 nUnit 中运行一次这个测试,我会得到输出(如预期的那样):

1742 [TestRunnerThread] DEBUG Tests.TestSomthing (null) - in test method0

但是,如果我在 nUnit.exe 中再次(或更多)按 RUN,我会得到以下信息:

1742 [TestRunnerThread] DEBUG Tests.TestSomthing (null) - in test method1
1742 [TestRunnerThread] DEBUG Tests.TestSomthing (null) - in test method1

依此类推(如果我运行它 5 次,我将得到 5 条重复行)。现在,如果我单独从 reSharper 运行相同的测试,输出很好并且不会重复。但是,如果我将此测试与同一类中的其他 2 个测试一起运行,输出将重复 3 次。

我完全糊涂了。这到底是怎么回事?

最佳答案

每次测试运行时都会重新初始化 Log4net,并且每次都会添加 appender。我怀疑 ReSharper 每次都启动一个新进程(ReSharper 测试运行程序)时不会表现出这种行为,而 NUnit GUI 则不会。

我过去有过各种不同的做法,但现在我已经使用“SetupFixture”来初始化 log4net(除其他外)。

[SetUpFixture]
public class UnitTestSuiteSetupTeardown
{
[SetUp]
public void Setup()
{
log4net.Config.BasicConfigurator.Configure();
}

[TearDown]
public void Teardown()
{
//Teardown stuff...
}
}

为每个测试程序集添加其中一个,并确保该类没有命名空间。它将为您的所有测试运行一次,即程序集中的所有测试。我个人在解决方案级别拥有其中之一,然后将其添加为每个测试项目的链接。

更新

上面的示例遵循问题并设置了基本配置。在我实际的 SetUpFixture 中,我从 log4net 配置文件(我再次将其存储在解决方案级别,然后添加为所有测试项目的链接)初始化 log4net,例如

[SetUpFixture]
public class UnitTestSuiteSetupTeardown
{
[SetUp]
public void Setup()
{
LogFactory.Configure();
}

[TearDown]
public void Teardown()
{
//Teardown stuff...
}
}

还有一个示例 LogFactory 类型类。

public static class LogFactory
{
public const string DefaultConfigFileName = "log4net.config";

static ILog GetLogger(Type callingType)
{
return new Log4NetLogger(LogManager.GetLogger(callingType));
}

public static void Configure()
{
Type type = typeof(LogFactory);
FileInfo assemblyDirectory = AssemblyInfo.GetCodeBaseDirectory(type);
FileInfo configFile = new FileInfo(Path.Combine(assemblyDirectory.FullName,
DefaultConfigFileName));
XmlConfigurator.ConfigureAndWatch(configFile);
log4net.ILog log = LogManager.GetLogger(type);
log.ToString();
}
}

关于c# - 多次记录(或运行)单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3042703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com