我对服务类进行了单元测试,我想为AppDomain.CurrentDomain.BaseDirectory
模拟var someCLass = new SomeClass()
,而无需更改此类。
在此类中,它用作生成用于读取文件的新路径的路径。但是,如果正在运行测试,AppDomain.CurrentDomain.BaseDirectory
将更改为其他目录。
我不想使用typemock隔离,但它似乎是一种可能的解决方法,我想找到其他方法来解决这个问题,也许可以使用Moq
。
public SomeClass
{
SomeClass()
{
//Use something like that
var path = AppDomain.CurrentDomain.BaseDirectory;
}
}
//Test Class
[TestFixture]
public class TestClass
{
private SomeClass someClass;
[Test]
public void SomeTest()
{
someClass = new SomeClass();
}
}
//Change AppDomain.CurrentDomain.BaseDirectory for unit test without changing original class.
答案 0 :(得分:0)
您可能不想更改班级,但这正是您应该做的。 如果要进行一些适当的测试,则需要确保该代码从一开始就可以进行测试。
有一个简单的解决方案,不需要很多更改,只需向构造函数或您实际要测试的方法中添加一个新参数,然后将实际路径传递给它即可。
您的代码可能如下所示:
public SomeClass
{
public SomeClass(string baseLocation)
}
然后实例化它时,您只需执行类似的操作
var basePath = AppDomain.CurrentDomain.BaseDirectory;
var someClass = new SomeClass(basePath);
现在,您可以从任何位置插入包含测试的路径。如果您需要可测试的代码,则需要删除此类依赖项。 DateTime.Now是可以通过这种方式注入的另一个示例。
此方法的另一个好处是,您无需担心模拟任何事情,并且测试代码变得非常简单并且可以维护