Я новичок в Moq и Mocks / Unit Testing в целом. После просмотра видео о Mocking, в котором используется Moq , я подумал, что у меня достаточно понимания, чтобы приступить к настройке нескольких простых тестов для проекта, над которым я работаю. Тем не менее, никакие манипуляции с кодом не помогут в моем первом прохождении теста.
Вот код, который у меня есть:
Тестируемый интерфейс
public interface IDataInterface
{
Task<IList<T>> GetData<T>(string url);
// Other stuff
}
Реализация метода интерфейса GetData
public async Task<IList<T>> GetData<T>(string url)
{
try
{
var json = await client.GetAsync(url).Result.Content.ReadAsStringAsync();
var data = (JObject)JsonConvert.DeserializeObject(json);
JArray arr = (JArray)data["resource"];
return arr.ToObject<IList<T>>();
}
catch (InvalidCastException icEx)
{
throw new InvalidCastException("An error occurred when retrieving the data", icEx);
}
// Other catches
}
Реализованный интерфейс службы вызова GetData
public async Task<IList<MyObj>> GetActiveObjs()
{
var data = await _myImplementedInterface.GetData<MyObj>(ActiveUrl);
return data;
}
Мой тест
[Fact]
public async void MyImplementedInterface_GetActive_ReturnsDataOrEmptyList()
{
var _activeUrl = "http://some.url";
using (var mock = AutoMock.GetLoose())
{
mock.Mock<IDataInterface>()
.Setup(x => x.GetData<MyObj>(_activeUrl))
.Returns(Task.FromResult(_SomeStaticDataRepresentation)));
var svc = mock.Create<MyService>();
var expected = _SomeStaticDataRepresentation;
var actual = await svc.GetActiveObjs();
Assert.True(actual != null);
// Other assertions that never matter because of the null value of _actual_ variable
}
}
Вначале у меня были проблемы, потому что в проекте используются Autofa c и Moq, но я решил эти конкретные c проблемы. Тем не менее, я не могу проигнорировать нулевое значение, возвращаемое после вызова службы. При запуске проекта метод возвращает данные, как и ожидалось, поэтому я не уверен, где находится проблема. Просмотр различных постов и Moq Quickstart не позволили мне решить эту проблему самостоятельно, поэтому я надеюсь, что здесь найдется кто-то, кто скажет мне, что я делаю неправильно. Я уже извиняюсь, так как уверен, что это новая ошибка ie.