2
開始實施在C#單元測試,使用的MSTest單元測試,測試的ExpectedException失敗雖然異常被拋出
在這個特殊的測試我想驗證一個ArgumentNullException
被拋出。即使我的代碼確實會拋出異常,但我的測試失敗了,因爲它顯然沒有收到該類型的異常。
我哪裏錯了?註定是簡單的東西....
我的測試是這樣的:
[TestMethod()]
[ExpectedException(typeof(ArgumentNullException), "A null HttpContent was inappropriately allowed")]
public void Test_HttpContent_Null_Throws_Exception()
{
MultipartFormDataMemoryStreamProvider provider = new MultipartFormDataMemoryStreamProvider();
Assert.ThrowsException<ArgumentNullException>(()=>provider.GetStream(null, null));
}
而且GetStreams()
方法是這樣的:
public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
{
if (parent == null)
throw new ArgumentNullException("parent");
if (headers == null)
throw new ArgumentNullException("headers");
var contentDisposition = headers.ContentDisposition;
if (contentDisposition == null)
throw new InvalidOperationException("Did not find required 'Content-Disposition' header field in MIME multipart body part.");
_isFormData.Add(String.IsNullOrEmpty(contentDisposition.FileName));
return base.GetStream(parent, headers);
}
只是好奇,似乎每個人都使用xUnit或NUnit這些天。是什麼促使你選擇MSTest?我不是想開始一場辯論或者激烈的戰爭,但是我很驚訝任何人都會在2017年選擇它 – Novaterata
這是一個公平的問題。最終,它隨Visual Studio一起提供,並且是.Net默認值。我事先做了一些谷歌搜索,找不到任何明確的,沒有偏見的寫作。簡而言之,你更喜歡哪個?爲什麼?在我們開始在公司範圍內實施之前,我在這些測試中還處於早期階段,並且可以輕鬆切換它們。另外,我們也會編寫集成測試 - 想想我在MSTest更好地處理這些東西的地方閱讀某些東西(不記得我在哪裏讀取它) – Darren
我只使用NUnit 2和3,NUnit 2是一個並行化的痛苦,我不得不自己推出,但NUnit 3解決了這個問題。對我來說主要的是對參數化測試和測試套件(TestFixtures)的支持。這是我的理解,MSTest不支持參數化測試,但也許在V2中改變了。 xUnit似乎是單元測試的新金標準。它由.NET Core和MSBuild使用,因爲MS Test不是跨平臺的。我沒有強烈的意見,但你可能會選擇測試框架的WinForms,並想警告你。 – Novaterata