多執行緒測試
阿新 • • 發佈:2020-08-07
一般多執行緒
ublic static bool Changed;
public static async Task ChangeAsync()
{
await Task.Run(() =>
{
Task.Delay(1000);
Changed = true;
});
}
[TestMethod()] public async Task ChangeAsyncTest_OriginalFalse_ChangeToTrue() { AsyncClient.Changed = false; await AsyncClient.ChangeAsync(); Assert.IsTrue(AsyncClient.Changed); }
在非同步單元測試方法中也必須返回Task,這是MSTest的約定,否則這個測試方法無法執行起來。
精確定位丟擲的異常
原始碼
public static async Task ChangeAsync()
{
await Task.Run(() =>
{
throw new InvalidOperationException();
});
}
測試程式碼
[TestMethod()] public async Task ChangeAsyncTest_ThrowInvalidOperationException() { await Assert.ThrowsExceptionAsync<InvalidOperationException>(async () => { await AsyncClient.ChangeAsync(); }); }
非同步方法mock
public interface ITextReader
{
Task<string> ReadTextAsync();
}
測試程式碼中mock其返回結果可以有如下兩種寫法:
var mockTextReader = new Mock<ITextReader>(); //可以這樣 mockTextReader.Setup(x => x.ReadTextAsync()).Returns(async ()=>await Task.FromResult("mockValue")); //也可以這樣 mockTextReader.Setup(x => x.ReadTextAsync()).ReturnsAsync(()=> "mockValue");