黃偉榮的學習筆記

軟體的世界變化萬千,小小的我只能在這洪流奮發向上以求立足。
随笔 - 100, 文章 - 0, 评论 - 212, 阅读 - 17万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[小技巧]自動化測試時NLog的訊息輸出到測試結果中

Posted on   黃偉榮  阅读(707)  评论(0编辑  收藏  举报

平常我會用Visual Stuido的測試專案,寫一些自動化測試,如單元測試、整合測試等等,受測的Code中有很多地方用NLog記錄訊息,在正試的環境,會寫到資料庫,但測試時我會想把訊息輸出到每一個測試的結果中,除了節省資料庫外,也比較容易追縱錯誤訊息。

NLog設定檔

image 是.Net中很熱門的Log記錄,使用與設定都很簡單,這裡說明一下測試專案需要的設定檔,我的習慣是寫成獨立的檔案,不過也可以寫到web.config、app.config中

1
2
3
4
5
6
7
8
9
10
11
NLog.Config
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="debuglog" xsi:type="Console" layout="${date}: ${message}" />
  </targets>
  <rules>   
    <logger name="*" writeTo="debuglog" />
  </rules>
</nlog>

 

注意我的type是用Console,為什麼呢?

 

因為Visual Studio的測試支援將

  • System.Console
  • System.Diagnostics.Trace
  • System.Diagnostics.Debug

這三個Class在測試時,所Write的訊息都會寫到測試結果中,而為什麼不用NLog的DebugTarget或Trace Target呢,因為NLog的

Debug是用StringBuilder記錄,不會輸出到測試結果中。

Trace會輸出到測試結果中,只是NLog訊息大於Error會引發Trace.Fail,會跳出偵錯對話框,使得自動化測試中斷。

 

image

圖一 Trace.Fail的偵錯話框

Note:

NLog的Targets有AspNet,AspResponse,Chainsaw,ColoredConsole,Console,Database,Debug,Debugger,EventLog,File,FormControl,LogReceiverService,Mail,Memory,MessageBox,MethodCall,MSMQ,Network,NLogViewer,Null,OutputDebugString,PerfCounter,RichTextBox,Trace,WebService等25種,測試過還是Console在測試時比較好用。

 

檔案屬性

檔案的屬性用設成如下

 image

圖二 檔案屬性

 

 

測試

寫個簡單的Code來測測看結果吧

public class Sample {
    private static Logger logger = LogManager.GetCurrentClassLogger();

    public void Foo() {
        logger.Trace("Start");
        //================
        logger.Trace("\tDo Something");
        //================
        logger.Trace("End");
    }
}

[TestMethod]
public void FooTest()
{
    var sample = new Sample();
    sample.Foo();
}

 

image 

圖3 NLog輸出到測試結果

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
历史上的今天:
2007-10-02 檔案 "C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\master.mdf" 是壓縮檔,但不在唯讀資料庫或檔案群組中。必須解壓縮該檔案 的解決方法
点击右上角即可分享
微信分享提示