C#类中的相对路径如何与NUnit 3.x一起使用? - c#

我有一个带有以下代码的C#类。

class Database
{
    private const string DatabaseFilepath = @"Settings\Database.xml";
    ...
    private void LoadDatabase()
    {
        XmlDocument databaseDocument = new XmlDocument();
        databaseDocument.Load(DatabaseFilepath);
    }
}

现在,此代码在我编译时可以很好地执行,并且可以从Database.xml文件读取。但是,当我运行碰巧使用NUnit执行此代码的单元测试时,出现以下异常。

结果消息:System.IO.DirectoryNotFoundException:找不到
路径'C:\ Program Files(x86)\ Microsoft Visual Studio的一部分
14.0 \ Common7 \ IDE \ Settings \ Database.xml”。

现在,当我使用Visual Studio测试工具时,这可以很好地工作。但是,切换到NUnit后,看起来好像是在其他工作目录中搜索。我该如何更改?

注意:我发现了其他问题,询问如何在测试代码中使用相对路径。在我的示例中,我的相对路径在我的类代码中。

参考方案

出于政策考虑,我们决定NUnit 3在运行测试时不应像在V2中那样更改当前目录。使用V2,您可以在不同位置运行程序集的完整列表,NUnit会在运行之前将cd更改为每个程序集的位置。我们停止是因为:

对于运行其他程序的程序来说,更改当前目录是一件不友好的事情。
无论如何,它将无法正常工作,因为位于不同目录中的多个程序集可以同时并行运行。

对于测试代码,有一个简单的解决方案,但是您说这是被测试应用程序中的代码,因此解决方案有所不同。

短期而言,您的测试可以在运行要求以某种方式设置CD的SUT代码之前设置CD。我建议在某种程度的SetUp中执行此操作,并在相应的拆解中将其还原。

从长远来看,请修复您的SUT,使其不需要以特定方式设置CD即可正常运行。

在Python中避免相对导入和sys.path - python

当前,我有一个Python项目正在处理这样的目录结构:tests/ corpus/ __init__.py tests.py monkey/ corpus/ corpus.py setup.py 我想将tests.py(在测试/语料库中)导入corpus.py(在猴子/语料库中)。我已经看到许多涉及使用相对导入和sys.path的解决方案,但是我也看到人们直…

单元测试休息点 - java

我已经用Java编写了REST端点。应用程序中有c#代码使用RestClient调用这些端点。我正在考虑为这些编写单元测试。只是想知道什么是最好的方法? Moq框架或NUNIT还是其他?有任何想法吗?谢谢。 参考方案 如果要在Java中测试REST端点,则可以使用Mockito(https://site.mockito.org/)之类的模拟框架来模拟所需的任…

在没有静态测试数据库的情况下,如何使DAO类的单元测试变脆? - java

这是scanario:我正在研究一个DAO对象,该对象使用休眠条件API来形成许多复杂的查询,以对数据库执行某些任务(例如,跨多个字段的关键字搜索)。我们需要对此进行单元测试,以确保所生成的查询在各种情况下都是正确的。测试它的一种方法(可能是更好的方法)是通过在最后检查休眠条件并模拟数据库交互来正确创建休眠条件。但是,这是不理想的,因为它首先是一种作弊行为(…

PHPUnit测试的目录布局? - php

我是从事PHP项目的长期Java程序员,并且试图使PHPUnit正常工作。使用Java进行单元测试时,通常将测试用例类和常规类放在单独的目录中,如下所示-/src MyClass.java /test MyClassTest.java 等等。使用PHPUnit进行单元测试时,遵循相同的目录结构是常见的做法,还是有更好的方法来布置测试类?到目前为止,我可以使“…

是否可以在静态类中注入模拟 - java

我有静态课。我正在为使用Junit和Mockito的静态方法之一编写JUnit。在该方法中,将调用其他类级别的静态变量的函数。我想模拟这个函数调用。我的代码如下,class ABC { public static SomeVariable var; public static Value getSomething() { try { Value val = …