使用NUnit进行单元测试时,获得所需/正确的装配路径
本文关键字:路径 NUnit 单元测试 使用 | 更新日期: 2023-09-27 18:22:42
我刚刚开始试验moq来对我的模块进行单元测试。
实际上,我必须为其编写单元测试的类使用
CCD_ 1内部来确定路径。
但是,这在编写单元测试时不起作用,因为执行程序集的路径不同(采用单元测试程序集的道路)
CCD_ 2。
我试过了,禁用了影子复制。
AppDomainSetup appDomain= new AppDomainSetup{ShadowCopyFiles = "false",};
appDomain.ShadowCopyFiles=false.ToString();
但是,它不起作用!
欢迎提出任何建议。提前谢谢。
您可以使用NUnit的Charlie Poole提到的TestContext.CurrentContext.TestDirectory
。
参考:https://stackoverflow.com/a/29057351/589574
也许这不是你问题的确切答案,但就我个人而言,我甚至不会在单元测试中尝试获得Assembly.GetExecutingAssembly().Location
的实际值。我会创建这样的东西:
public interface IAssemblyHelper
{
string GetLocationOfExecutingAssembly();
}
public class AssemblyHelper : IAssemblyHelper
{
public string GetLocationOfExecutingAssembly()
{
return Assembly.GetExecutingAssembly().Location;
}
}
在运行时,我会将AssemblyHelper
作为IAssemblyHelper
注入到需要它的类的构造函数中。在单元测试中,我会模拟IAssemblyHelper
,将其设置为返回期望的路径,并将模拟传递到类的构造函数中。
测试代码是否与应用程序中实际执行程序集的位置路径一起工作应该是验收测试的一部分。
我的同事提出了以下适用于我们所有用例的解决方案:
public static string AssemblyDirectory
{
get
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
var uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
}
}
最后,我通过以下方式实现了这一点:
我使用了NUnit框架,并在NUnit中禁用了影子复制。在调用单元测试库的目录中创建了配置文件的副本。
因此,无论何时调用我的单元测试(比如从路径"A"调用),我的应用程序都不会抱怨该位置没有配置文件,因为我将配置文件放在了路径"A"中。
(ps:我得到装配位置的原因是能够在该位置找到我的配置文件)
[整个想法是这样的:使用卷影复制,汇编路径是动态的。禁用它,汇编路径就是静态的]