Skip to main content

驗證互動

定義

驗證目標物件和其他物件的互動是否符合預期。

流程

測試情境

  1. 有一個類別 LogAnalyzer,這類別提供 Log 相關的功能。
  2. 有一個方法IsValidLogFileName,可以用來檢查 log 檔案的附檔名是符合規範,且不區分大小寫。
  3. 有一個屬性WasLastFileNameValid,會記住最後一次驗證的結果。
  4. 當檔名為空時,需要拋出 Exception: ArgumentException
  5. 有一個方法Analyze,可以用來檢查檔名的長度是否符合規範,如果不符合要透過外部的 WebService 紀錄。
  6. 需要撰寫單元測試驗證方法的正確與否。
warning

這個範例需要搭配模擬物件的概念,透過一個模擬物件,確認模擬物件地的互動結果,來做驗證。
詳細的觀念可以參考後面的內容。連結

以下範例的實際專案可以參考這裡

範例

namespace Lab.Test.Unit.LogNotification;

public class LogAnalyzer
{
private readonly IWebService _webService;

public LogAnalyzer(IWebService webService)
{
this._webService = webService;
}

public bool WasLastFileNameValid { get; set; }

public bool IsValidLogFileName(string fileName)
{
this.WasLastFileNameValid = false;
if (string.IsNullOrEmpty(fileName))
{
throw new ArgumentException("fileName has to be provided");
}

var isValid = fileName.EndsWith(".SLF", StringComparison.CurrentCultureIgnoreCase);
this.WasLastFileNameValid = isValid;

return isValid;
}

public void Analyze(string fileName)
{
if (fileName.Length<8)
{
this._webService.LogError($"FIleName too short: {fileName}");
}
}
}

案例參考

單元測試的藝術