簡體   English   中英

如何模擬AppDomain.CurrentDomain.BaseDirectory

[英]How to mock AppDomain.CurrentDomain.BaseDirectory

我有服務類的單元測試,我想模擬AppDomain.CurrentDomain.BaseDirectory for var someCLass = new SomeClass()而不更改此類。

在此類中,它用作生成用於讀取文件的新路徑的路徑。 但是如果測試運行, AppDomain.CurrentDomain.BaseDirectory將被更改為不同的目錄。

我不想使用typemock Isolate,但它看起來像一個可能的修復,我想找到不同的方法來解決這個可能與Moq

public SomeClass
{
 SomeClass()
 {
  //Use something like that
  var path = AppDomain.CurrentDomain.BaseDirectory;
 }
}

//Test Class
[TestFixture]
public class TestClass
{
 private SomeClass someClass;

 [Test]
 public void SomeTest()
 {
  someClass = new SomeClass();
 }
}

//Change AppDomain.CurrentDomain.BaseDirectory for unit test without changing original class.

你可能不想改變你的課程,但這正是你應該做的。 如果您想進行一些正確的測試,您需要確保代碼實際上是可測試的。

有一個簡單的解決方案,不需要進行大量更改,只需向構造函數或實際要測試的方法添加新參數,並將實際路徑傳遞給它。

您的代碼可能如下所示:

public SomeClass 
{
   public SomeClass(string baseLocation)
}

然后當你實例化它時,你可以簡單地做一些事情

var basePath = AppDomain.CurrentDomain.BaseDirectory;

var someClass = new SomeClass(basePath);

現在,您可以從任何地方注入路徑,包括測試。 如果您需要可測試代碼,則需要刪除此類依賴項。 DateTime.Now是另一個可以這種方式注入的例子。

這種方法的另一個好處是你不需要擔心嘲笑任何東西,你的測試代碼變得非常簡單和實際可維護

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM