我有一個單元測驗類方法,當前需要 1 個引數,但我想擴展它以接收 2 個引數,后者是模擬物件上呼叫的次數。我目前擁有的是這樣的,由于錯誤而無法成功編譯
[Theory]
[InlineData("", Times.Never)]
[InlineData("test", Times.Once)]
public async void PostAsync_SendAsync_VerifyOnce(string id, Times outcome)
{
var mockClients = new Mock<IHubClients>();
...
...
...
mockClients.Verify(clients => clients.Client(id), outcome);
}
有可能實作這樣的目標嗎?所以理論上這兩個測驗都應該通過,第一個測驗永遠不會被呼叫,因為第一個引數是空白的,第二個測驗將被呼叫一次,因為引數是有效的。
uj5u.com熱心網友回復:
您可以使用以下方法實作此目的Times.Exactly:
[Theory]
[InlineData("", 0)]
[InlineData("test", 1)]
public async void PostAsync_SendAsync_VerifyOnce(string id, int expectedCalls)
{
var mockClients = new Mock<IHubClients>();
...
...
...
mockClients.Verify(clients => clients.Client(id), Times.Exactly(expectedCalls));
}
uj5u.com熱心網友回復:
使用 aTheoryData并通過 a 將其系結到您的測驗MemberDataAttribute,這允許進行這些Times.Once()和Times.Never()方法呼叫。
它還允許其他場景,例如AtLeast和AtMost。
public static TheoryData GetTestCases()
{
return new TheoryData<string, Times>()
{
{ "", Times.Never() },
{ "test", Times.Once() }
};
}
[Theory]
[MemberData(nameof(GetTestCases))]
public void PostAsyncSendAsyncVerifyOnce(string id, Times outcome)
{
var mockClients = new Mock<IHubClients>();
// ...
mockClients.Verify(clients => clients.Client(id), outcome);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/524948.html
