我在C#中有以下类,它从propriatery .DLL创建一个对象,在初始化时需要在可访问目录中有许可证。
public CplexServices{
private Cplex _cplex;
public Cplex Cplex { get { return _cplex; } }
public CplexServices()
{
try
{
_cplex = new Cplex();
}
catch
{
throw new Exception("Path or license file is wrong");
}
}
}
如果Windows系统路径错误或许可证文件不正确,“new Cplex()”可能会失败。我想写一个测试来断言当路径和/或许可证文件错误时是否抛出了正确的异常。
如何在不更改路径或许可证文件的情况下编写此测试?
答案 0 :(得分:1)
你做不到。您需要为文件设置错误位置,并确认您获得了异常。
但可能这不是你单元测试的东西,因为决定失败的代码不适合你。
我假设你在配置中设置了这个文件的位置?然后你需要测试那个位置是否正确;但是考虑到如果你有多个部署和不同的配置,你需要在适当的环境下运行你的测试。
答案 1 :(得分:1)
您可以使用
string oldPath = Environment.GetEnvironmentVariable("PATH");
Environment.SetEnvironmentVariable("PATH", "MyBadPath");
// Do tests
Environment.SetEnvironmentVariable("PATH", oldPath);
要测试路径问题,请输入错误的路径。要测试许可证文件,请输入包含错误许可证文件的测试目录的路径。
答案 2 :(得分:1)
你在测试什么?我相信您正在测试对新Cplex()的调用的错误处理路径是否正确。
public CplexServices()
{
try
{
_cplex = new Cplex();
}
catch
{
throw new Exception("Path or license file is wrong");
}
}
你不是新的Cplex()本身,它会在缺少许可证文件时抛出异常,而是在测试如果它会抛出异常你做对了。在这种情况下,它是如此简单,以至于我可能不会太在意。但是,如果这更复杂,例如一些严肃的恢复处理,那么我们更愿意能够测试它。
一种方法,通过工厂。
public CplexServices(CplexFactory myFactory)
{
try
{
_cplex = myFactory.makeCplex();
}
catch
{
throw new Exception("Path or license file is wrong");
}
}
现在,在您的测试中,您可以通过一个工厂,该工厂可以明确地抛出触发您要测试的路径的异常。
这仍然留下了如何测试Cplex()构造函数本身的问题。可以说这不是你的问题,作者应该有自己的单元测试。