我目前正在编写我正在编写的“ PluginsService”。我需要使用Assembly,AssemblyName,Directory和File的系统库。目前,我正在为每个接口创建包装器接口,因此可以在测试中模拟它们。但是,这确实意味着我必须在服务中注入很多包装器。
例如,当测试在文件夹中搜索某些插件的方法时,我正在执行此操作
With.Mocks(mockery)
.Expecting(() =>
{
Expect.Call(directory.GetFiles(PLUGINPATH, PLUGINSEARCHPATTERN)).IgnoreArguments().Return(pluginLibraries);
Expect.Call(file.ReadAllBytes(null)).IgnoreArguments().Return(bytes);
Expect.Call(assemblyName.GetAssemblyName("fileName")).IgnoreArguments().Return(name);
Expect.Call(assembly.GetExecutingAssembly()).Return(executingAssembly);
})
.Verify(() => result = service.FindAvailablePlugins());
我有2个问题:
Directory
类,或者做我所做的事情,只有假的Boundary类和您注入的某种形式的创建者。希望有所帮助。
public static class SystemTime
{
public static Func<DateTime> Now = () => DateTime.Now;
}
然后在测试中:
SystemTime.Now = () => new DateTime(2000,1,1);
repository.ResetFailures(failedMsgs);
SystemTime.Now = () => new DateTime(2000,1,2);
var msgs = repository.GetAllReadyMessages();
Assert.AreEqual(2, msgs.Length);
这是注入的替代方法,但不是线程安全的。Dealing with time in tests