【发布时间】:2020-02-10 19:32:37
【问题描述】:
总的来说,我是 Moq 和 Mocks/单元测试的新手。看了a video on Mocking which uses 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
}
}
在早期,由于项目使用 Autofac 和 Moq,我遇到了一些问题,但我解决了这些具体问题。但是,我似乎无法超越从服务调用返回的空值。运行项目时,该方法返回数据,正如预期的那样,所以我对问题所在感到困惑。查看各种帖子和 Moq 快速入门并没有提供我自己解决这个问题所需的内容,所以我希望这里有人可以告诉我我做错了什么。我已经道歉,因为我确定这是一个新手错误。
【问题讨论】:
标签: c# unit-testing moq