0

だから私はこれを機能させ、アイブはパケットに切り替えました.dllのいくつかのバージョンが変更されたと思います。

しかし、私はまだ私が得ているエラーを理解していません。

System.ArgumentException : LoggerName already in use
      Parameter name: loggerName

私のコードは基本的にここにあるものとまったく同じです

http://www.tomdupont.net/2015/06/capture-xunit-test-output-with-nlog-and.html

public class NLogTests : IDisposable
{
    private readonly ILogger _logger;

    public NLogTests(ITestOutputHelper outputHelper)
    {
        _logger = outputHelper.GetNLogLogger();
    }

    public void Dispose()
    {
        _logger.RemoveTestOutputHelper();
    }

    [Fact]
    public void Hello()
    {
        _logger.Trace("World Trace");
        _logger.Debug("World Debug");
        _logger.Warn("World Warn");
        _logger.Error("World Error");
    }
}

と構成

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  throwExceptions="true">
  <extensions>
    <add assembly="xunit.NLog" />
  </extensions>
  <targets async="false">
    <target xsi:type="TestOutput"
      layout="${time}|${level:uppercase=true}|${logger}|${message}"
      name="Test" />
  </targets>
  <rules>
    <logger name="*" minlevel="Debug" writeTo="Test" />
  </rules>
</nlog>

このGetNLogLoggerメソッドには、ロガー名と増分サフィックスの bool を取るオーバーロードがあります。これらを使用しても役に立ちません。

私は本当に混乱しています。

スタックトレース:

System.ArgumentException
LoggerName already in use
Parameter name: loggerName
   at Xunit.NLog.Targets.TestOutputTarget.Add(ITestOutputHelper testOutputHelper, String loggerName)
   at Xunit.NLog.Helpers.TestOutputHelpers.AddTestOutputHelper(ITestOutputHelper testOutputHelper, String loggerName, Boolean addNumericSuffix)
   at Xunit.NLogTestOutputExtensions.GetNLogLogger(ITestOutputHelper testOutputHelper, String loggerName, Boolean addNumericSuffix)
   at ProjectRake.BusinessLogic.Spec.TautologiesToVerifyNLogOutput..ctor(ITestOutputHelper outputHelper) in M:\programming\ProjectRake\src\server\ProjectRake.BusinessLogic.Spec\TautologiesToVerifyNLogOutput.cs:line 19

編集: すべての xunit を 2.1.0 にダウングレードしました。同じ問題です。

4

1 に答える 1

0

outputHelper.GetNLogLogger();呼んでいるAddTestOutputHelper("")

一度呼び出すだけで機能すると思います。

outputHelper.GetNLogLogger("myname");または使用できますoutputHelper.GetNLogLogger(typeof(NLogTests).Name);

于 2016-05-19T11:37:27.047 に答える