1
我想取代我的單元測試的Environment.GetFolderPath
行爲創造鼴鼠,但一代又痣的System
組裝後,System.Moles
集不包含MEnvironment
類型的定義。無法爲System.Environment類
我想取代我的單元測試的Environment.GetFolderPath
行爲創造鼴鼠,但一代又痣的System
組裝後,System.Moles
集不包含MEnvironment
類型的定義。無法爲System.Environment類
您是否嘗試過在接口類型中存根?子可以通過構造函數注入或通過方法輸入參數傳入。例如,創建接口IEnvironment,包括GetFolderPath方法。如果你已經知道如何做到這一點,那麼隨時可以繼續前進。否則,以下演示如何在Environment類中存根。 (我在我的手機上打字,如此忍受我;)
public interface IEnvironment
{
string GetFolderPath(Environment.SpecialFolder folder);
}
接下來,創建一個存根:
public class MyEnvironment : Environment, IEnvironment
{
public string GetFolderPath(Environment.SpecialFolder folder)
{
return base.GetFolderPath(folder);
}
}
傳遞存根到您的方法或類構造函數的參數:
public void MyMethod(IEnvironment env)
{
var path = env.GetFolderPath():
}
要進行測試,請創建一個模擬類型或痣MyEnvironment.GetGolderPath。出於性能原因,創建一個模擬比一個移動類型更可取。模擬只是返回一個值,而不是調用基本方法,就像moled類型一樣。他的存根是必要的,無論哪種方式,所以你也可以做模擬,因爲它可以重新用於其他測試。
但我的生產代碼沒有能力設置Environment實例。它可以完成沒有痣,使用Moq或其他任何東西。 –
我不認爲你的代碼已經存根環境類,這就是爲什麼我建議重構一個。而且,是的,它肯定可以而且應該沒有痣。存根的目的是提供將模擬類型傳遞給測試代碼的方法。 –