DataConfig
是static
类,我想用Moq框架编写一个单元测试用例。
我尝试了以下两件事,但没有成功。
- mocmoc
AddSingleton
- 模拟完成
ConfigureServices()
我不确定以上哪种方法合适。有人能为测试用例提供一些代码片段吗?
public static class DataConfig
{
public static void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ICompose<int, PlatformRequest>, PlatformRequestComposer>();
services.AddSingleton<IConverter<TerminalGroup, TerminalFacility>,
PlatformResponseComposer>();
services.AddSingleton<IDepartures<int, TerminalFacility>>(
svc =>
{
var reqComp = svc.GetRequiredService<ICompose<int, PlatformRequest>>();
var resComp = svc.GetRequiredService<IConverter<TerminalGroup, TerminalFacility>,
PlatformResponseComposer>();
var smsBroker = svc.GetRequiredService<ISmsBroker>();
return new Departures<int,PlatformRequest,TerminalGroup,TerminalFacility>
(requestConverter,responseConverter, smsBroker, "http://some.dummy.url");
});
}
}
我建议使用黑盒测试。与其尝试创建模拟,不如尝试从结果/结果的角度来看待问题:
- 如果我调用
ConfigureServices
然后当我试图检索ICompose<int, PlatformRequest>
多次然后它返回相同的实例 - 如果我调用
ConfigureServices
,那么当我尝试多次检索IConverter<TerminalGroup, TerminalFacility>
时,它会返回相同的实例 - 等。
//Arrange
var collection = new ServiceCollection();
//Act
DataConfig.ConfigureServices(collection);
//Assert
var provider = collection.BuildServiceProvider();
var instance1 = provider.GetService<ICompose<int, PlatformRequest>>();
Assert.NotNull(instance1);
var instance2 = provider.GetService<ICompose<int, PlatformRequest>>();
Assert.NotNull(instance2);
Assert.True(instance1.Equals(instance2)); //If needed use deep equality comparison