我的控制器的方法
public async Task<IActionResult> GetPathData([FromODataUri] string uid)
{
try
{
if (!Guid.TryParse(uid, out Guid requestTypeGuid))
{
throw new ArgumentException($"{nameof(requestTypeGuid)} is null");
}
...
return Ok(response);
}
catch (Exception ex)
{
_log.Error(ex, ex.Message);
return BadRequest(ex.Message);
}
}
我的模擬設定
public class SomeControllerTest
{
private MockRepository mockRepository;
private Mock<ILog> mockLog;
public SomeControllerTest()
{
this.mockRepository = new MockRepository(MockBehavior.Strict);
this.mockLog = this.mockRepository.Create<ILog>();
}
private SomeController CreateSomeController()
{
return new SomeController(this.mockLog.Object);
}
我的單元測驗用例
[Fact]
public async Task GetPathData_IfBlock_ArgumentException()
{
// Arrange
var someController = this.CreateSomeController();
mockLog.Setup(x => x.Error(It.IsAny<string>())); //I tried this
//Act
var result = await someController.GetPathData("2");
//Assert
var ex = Assert.Throws<ArgumentException>(() => result);
Assert.Equal("requestTypeGuid is null", ex.Message);
}
出現錯誤:訊息:
Moq.MockException : ILog.Error(System.ArgumentException: requestTypeGuid 在 TMo.MWav.API.Controllers.SomeController.GetPathData(String uid) "requestTypeGuid is null") 呼叫失敗,模擬行為嚴格。模擬上的所有呼叫都必須具有相應的設定。
uj5u.com熱心網友回復:
如果您使用MockBehavior.Strict,則應設定所有呼叫。
四個你的用例:
public async Task<IActionResult> GetPathData([FromODataUri] string uid)
{
// ...
catch (Exception ex)
{
_log.Error(ex, ex.Message);
// invoke ILog.Error with two parameters: `Exception` and `string`
}
// ...
}
,測驗應該這樣設定:
public async Task GetPathData_IfBlock_ArgumentException()
{
// ...
mockLog.Setup(x => x.Error(It.IsAny<Exception>(), It.IsAny<string>()));
// ...
}
也許您可以使用測驗來檢查您的方法行為:
[Fact]
public async Task GetPathData_IfBlock_ArgumentException()
{
// Arrange
var expectedMsg = "requestTypeGuid is null";
var someController = this.CreateSomeController();
mockLog.Setup(x => x.Error(It.IsAny<Exception>(), It.IsAny<string>()));
//Act
var result = await someController.GetPathData("2");
//Assert
Assert.IsType<BadRequestObjectResult>(result);
Assert.Equal(expectedMsg, (result as BadRequestObjectResult)?.Value);
mockLog.Verify(
x => x.Error(It.IsAny<ArgumentException>(), expectedMsg),
Times.Once);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/465586.html
上一篇:在不知道用戶將提供的物件數量的情況下系結物件串列的輸入
下一篇:從其他API方法在串列中添加值
