У меня вопрос о том, как написать модульный тест, мой метод:
[HttpGet]
[Route("api/CheckAvailability")]
public IHttpActionResult CheckAvailability()
{
var errorMessage = "DB not connected";
var dbAvailable = barcodeManager.CheckDBAvailability();
IHttpActionResult checkAvailability;
log.Debug($"DB available ? {dbAvailable}");
if (dbAvailable)
{
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion ;
log.Debug($"version = {version}");
checkAvailability = Ok(version);
}
else
{
checkAvailability = Content(HttpStatusCode.InternalServerError, errorMessage);
}
return checkAvailability;
}
, и я хочу проверить результат Ok (версия). Я пытался написать этот модульный тест:
[TestMethod]
public void CheckAvailabilityTest()
{
var actualQR = barcodeControllerTest.CheckAvailability();
var contentVersion = actualQR as OkNegotiatedContentResult<string>;
Assert.AreNotEqual("", contentVersion.Content);
Assert.IsInstanceOfType(actualQR, typeof(OkResult));
}
, но я получаю это сообщение об ошибке:
Сообщение об ошибке: Ошибка Assert.IsInstanceOfType. Ожидаемый тип: <System.Web.Http.Results.OkResult>
. Фактический тип: <System.Web.Http.Results.OkNegotiatedContentResult
1 [System.String]> `.
Я знаю, что могу обойти проблему, переписав метод действия с использованием метода Content
, как я сделал для InternalServerError
, и я знаю, как написать модульный тест для Ok()
без какой-либо обратной строки, но я думаю, что это неправильно, я изменяю свой метод действия, чтобы написать модульный тест, потому что мой модульный тест должен проверить мой код, и теперь я Любопытно узнать, есть ли способ проверить, возвращает ли ActionMethod Ok()
со строкой и без использования метода Content
.