C# 基于nlog输出的功能测试

C# 基于nlog输出的功能测试,c#,testing,nlog,C#,Testing,Nlog,我得到了一些依赖于Nlog输出的测试。我需要一个变量,这样我就可以深入到字符串中去,看看是否一切正常。一定有更好的办法,但我什么也找不到 以下是测试和正在测试的类: [TestFixture] public class ProcessMessagesFromQueues { private static string StuffLogged; [SetUp] public void Init() { StuffLogged = string.Em

我得到了一些依赖于Nlog输出的测试。我需要一个变量,这样我就可以深入到字符串中去,看看是否一切正常。一定有更好的办法,但我什么也找不到

以下是测试和正在测试的类:

[TestFixture]
public class ProcessMessagesFromQueues
{
    private static string StuffLogged;

    [SetUp]
    public void Init()
    {
        StuffLogged = string.Empty;
        RedirectNLog();
    }

    private static void RedirectNLog()
    {
        MethodCallTarget target = new MethodCallTarget();
        target.ClassName = typeof(ProcessMessagesFromQueues).AssemblyQualifiedName;
        target.MethodName = "LogMethod";
        target.Parameters.Add(new MethodCallParameter("${message}"));

        NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug);
    }

    [Test]
    public void GetNewSmsMessageWhenPublished()
    {
        // Subscribe
        var sqs = FluentNotificationStack.Register(configuration =>
        {
            configuration.Component = "privateapnworker";
            configuration.Environment = "qa28";
            configuration.Tenant = "uk";
        });

        sqs
        .WithSqsTopicSubscriber()
        .IntoQueue("")
        .WithMessageHandler(new ConfigurationSmsHandler())
        .StartListening();

        // Publish
        sqs.WithSnsMessagePublisher<ConfigurationSmsSent>();

        string fakeImei = DateTime.Now.ToLongTimeString();
        string expected = $"Configuration SMS captured! Imei: {fakeImei} status StatusOk{Environment.NewLine}";

        sqs.Publish(new ConfigurationSmsSent(fakeImei, "StatusOk"));

        // Wait for it
        Thread.Sleep(1000);

        // 4. Compare the messages
        StringAssert.Contains(expected, StuffLogged);
    }

    public static void LogMethod(string message)
    {
        StuffLogged += message + Environment.NewLine;
    }

}
[TestFixture]
公共类ProcessMessagesFromQueues
{
私有静态字符串填充;
[设置]
公共void Init()
{
StuffLogged=string.Empty;
重定向nlog();
}
私有静态无效重定向NLOG()
{
MethodCallTarget=新的MethodCallTarget();
target.ClassName=typeof(ProcessMessagesFromQueues).AssemblyQualifiedName;
target.MethodName=“LogMethod”;
Add(newmethodcallParameter(“${message}”);
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target,LogLevel.Debug);
}
[测试]
public void GetNewSmsMessageWhenPublished()
{
//订阅
var sqs=FluentNotificationStack.Register(配置=>
{
configuration.Component=“privateAnpworker”;
configuration.Environment=“qa28”;
configuration.Tenant=“uk”;
});
sqs
.WithQStopicSubscriber()
.IntoQueue(“”)
.WithMessageHandler(新配置msHandler())
.吃惊地倾听();
//发表
sqs.withssnsmessagepublisher();
string fakeImei=DateTime.Now.ToLongTimeString();
应为字符串=$“已捕获配置SMS!Imei:{fakeImei}状态状态OK{Environment.NewLine}”;
sqs.发布(新配置MSSENT(fakeImei,“状态OK”);
//等等
睡眠(1000);
//4.比较消息
StringAssert.Contains(应为,已记录);
}
公共静态void LogMethod(字符串消息)
{
StuffLogged+=message+Environment.NewLine;
}
}
具有输出的类:

public class ConfigurationSmsHandler : IHandler<ConfigurationSmsSent>
{
    private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

    public bool Handle(ConfigurationSmsSent message)
    {
        Logger.Info($"Configuration SMS captured! Imei: {message.Imei} status {message.Status}");
        return true;
    }
}
公共类配置处理器:IHandler
{
私有静态只读记录器Logger=LogManager.GetCurrentClassLogger();
公共布尔句柄(配置SSENT消息)
{
Logger.Info($“已捕获配置SMS!Imei:{message.Imei}状态{message.status}”);
返回true;
}
}

作为MethodCall目标的替代方案, 您可以指定NLog 并验证target.Logs中的输出

 MemoryTarget target = new MemoryTarget();
    target.Layout = "${message}";

    NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug);

    Logger logger = LogManager.GetLogger("Example");
    logger.Debug("log message");

    foreach (string s in target.Logs)
    {
        Console.Write("logged: {0}", s);
    }

作为MethodCall目标的替代方案, 您可以指定NLog 并验证target.Logs中的输出

 MemoryTarget target = new MemoryTarget();
    target.Layout = "${message}";

    NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug);

    Logger logger = LogManager.GetLogger("Example");
    logger.Debug("log message");

    foreach (string s in target.Logs)
    {
        Console.Write("logged: {0}", s);
    }