Как выполнить модульное тестирование RuntimeType - PullRequest
0 голосов
/ 16 октября 2018
[Test]
// arrange 
// ...
// act
var result = (Car) service.GetCar(req);

// assert
Assert.AreEqual(result, typeof(Car));  

Но я получаю следующую ошибку

Expected: <Models.Car> (Car)    
But was:  <Models.Car> (RuntimeType)

Я пытался изменить утверждение, чтобы использовать Is.InstanceOf:

Assert.AreEqual(result, Is.InstanceOf<Car>());

Но я все еще получаю ошибку,на этот раз

Expected: <Models.Car>
But was:  <<instanceof Models.Car>>

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вам не нужно разыгрывать результат service.GetCar(req).Это будет работать:

var result = service.GetCar(req);

Assert.IsInstanceOf<Car>(result);

Или, в качестве альтернативы, используйте:

var result = service.GetCar(req);

Assert.That(result, Is.TypeOf<Car>());
0 голосов
/ 16 октября 2018

Следующее означает, что вы хотите сравнить объект и тип, а вы хотите сравнить тип объекта: Assert.AreEqual(result, typeof(Car));

Вы можете использовать: Assert.AreEqual(result.GetType(), typeof(Car));, но я не уверен, будет ли эторабота.

Но лучший вариант - это попробовать приведение и неудача, если приведение не выполнено успешно:

try
{
    var result = (Car) service.GetCar(req);
}
catch (Exception ex)
{
    Assert.Fail();
}

или вы можете использовать метод Assert.ThrowsException(), чтобы проверить, еслиисключение было брошено, но это не так просто, как предыдущий метод.

Action action = () => { var result = (Car) service.GetCar(req); };
Assert.ThrowsException<Exception>(action);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...