[英]AppDomain.CurrentDomain.BaseDirectory changes to wrong directory
[英]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.