有時候,我需要進行不同的設置()調用不同的每次測試運行設置嘲弄 - 就像這樣:單元測試,並在我的測試嘲笑爲每個測試
private void Setup(bool isTrue)
{
mock.Setup(x => x.DisplayNames).Returns(new Dictionary<int, string>());
// ...
// 5x more of these are the same for all tests
if (isTrue)
mock.Setup(x => x.DisplayOld).Returns(isTrue);
// 5x more of these parameterlized setups
...
}
現在,在我的每一個單元測試我會打電話給安裝程序(true/false)。
由於單元測試並行運行(默認的xUnit),這將造成任何鎖定的問題? (假設兩個測試同時調用Setup())。
如果是這樣的話:
- 如何改變這種狀況?
- 如果想要使用傳遞參數的單個方法(如setup()) - 適用於不同的嘲諷場景,那麼正確的方法是什麼?
如果你的'Setup'方法被你的單元測試框架自動調用,那麼是的,你將會遇到問題。如果它實際上是由你的測試調用的,那麼它應該沒問題,假設A)模擬對象沒有被靜態存儲(例如,在一個對象工廠中),B),模擬對象沒有使用共享功能進行設置(例如:'.Returns(myDictionarySharedBetweenTests)'。 – Rob
Rob,請您澄清一下嗎?是的,我從我的每個測試[Fact]方法調用setup(),它是一個簡單的設置,就像上面的代碼中那樣什麼是共享的基於布爾標誌前只要設置不同的情景:mock.Setup(X => x.DoSomething).Returns(真)/假等 – ShaneKm