的方法,我有以下方法:如何進行單元測試有文件名作爲參數
public static IEnumerable<Customer> GetStuff(string fileName,int filterValue)
你將如何單元測試嗎?顯然,我的問題是fileName
參數。
謝謝!
的方法,我有以下方法:如何進行單元測試有文件名作爲參數
public static IEnumerable<Customer> GetStuff(string fileName,int filterValue)
你將如何單元測試嗎?顯然,我的問題是fileName
參數。
謝謝!
爲了讓另一個答案,嘗試:我想打theJollySin問題,但並沒有解釋不夠(恕我直言)
你似乎採取fileName
並擊中了系統的文件系統中的GetStuff
方法。如果你想對它進行單元測試,那就是問題所在。 你必須與你的文件系統(打開/創建/閱讀下載文件等)做的事情推到一個接口或東西,然後嘲笑這一點。 一個例子可能是:
public interface IMyFileIO
{
public byte[] ReadFromFile(int bytes); // whatever
}
public static IEnumerable<Customer> GetStuff(IMyFileIO file, int filterValue)
{
}
然後用嘲諷的框架(例如像MOQ)嘲笑IMyFileIO
:
[Test]
public void TestFileIO()
{
var mock = new Mock<IMyFileIO>();
mock.Setup(foo => foo.ReadFromFile(2)).Returns(new byte[]{2,3});
var myResult = MyClass.GetStuff(mock.Object, 10);
Assert. // <- what you need to check
}
請注意,這取決於你在做什麼,機會是很高,已經有一個interace /基類提供您需要的功能(StreamWriter的,等等)
感謝卡斯滕,這就是我一直在尋找的,是的,我會在我的情況下使用的StreamWriter。再次感謝 – 2012-03-28 05:07:53
我假設的問題是,該方法出去的文件系統來獲取文件? 我會爲前提,以實際測試爲您的方法來獲取...然後你可以在新創建的文件名來測試通過的文件。 它在這一點上變成了一個集成測試,但它仍然適用於測試目的。這只是不是一個「純粹」的單元測試
我會親自去改變的方法到更多的東西一般喜歡
public static IEnumerable<Customer> GetStuff(Stream dataStream,int filterValue)
這將使您能夠使用模擬流或MemoryStream的代替的FileStream的能力取數據並且單元測試正確。另外,我個人建議儘可能使用方法(Stream vs filePath就是一個很好的例子)。
謝謝,就是它 – 2012-03-28 05:08:51
不客氣。 :) – 2012-03-28 05:09:37
我沒有得到你的問題。什麼阻止你傳遞一個虛擬文件名作爲參數? – Zenwalker 2012-03-28 04:53:34
我不知道爲什麼它應該很明顯,你的問題是'fileName'參數。 'fileName'沒有什麼特別的地方讓我相信你有問題,那麼爲什麼它是你的問題? – Kiril 2012-03-28 05:00:50
@zenwalker在某些方法我從某個文件讀取數據,並做一些處理,請讓我知道我可以做到這一點,而不會傳遞fileName作爲參數 – 2012-03-28 05:04:46