好吧,这进入了有趣的领域。
您应该嘲笑这种依赖关系。
示例代码:
public interface IApplicationRootService {
Uri GetApplicationRoot();
}
public class ApplicationRootService : IApplicationRootService {
public Uri GetApplicationRoot() {
//etc
}
}
现在,在您调用 getexecutingassembly 之类的地方自由地应用您的代码。注入 IApplicationRootService 作为构造函数依赖项。
前任:
public class DoWork {
private IApplicationRootService _applicationRootService;
public DoWork(IApplicationRootService applicationRootService) {
_applicationRootService = applicationRootService;
}
public void DoSomething() {
var appRoot = _applicationRooService.GetApplicationRoot();
//do your stuff
}
}
现在,当您进行测试时,使用模拟服务并将应用程序根目录的返回值模拟到适当的文件夹中,以便 nunit 进行嗅探。
Ex 代码,使用 nunit 和 moq:
[Test]
public static void test_do_something() {
var applicationRootService = new Mock<IApplicationRootService>();
applicationRootService.Setup(service => service.GetApplicationRoot()).Returns(new Uri("MyRoot", UriKind.Relative);
var myClass = new DoWork(applicationRootService.Object);
//continue testing!
}