已编译DLL中的测试方法和测试类

时间:2015-06-30 06:36:27

标签: c# testing dll

Visual Studio(任何版本)中是否有一种方法可以使用已编译的Dll中的测试?

我有一个测试类:

[TestClass]
Public Class TestingClass
{
    [TestMethod]
    public void TestingMethod()
    {}
}

有没有办法将包含此类类的类库编译成Dll并在不同的测试项目中引用该DLL,以便它们显示在测试视图中?

我尝试过简单地编译库并在不同的项目中引用它并且测试没有显示在测试视图中。

3 个答案:

答案 0 :(得分:1)

我怀疑有一种内置方法可以做到这一点,因为它不是一个正常的用例,事实上我发现很难想象这是一个正确的事情。

正常测试方法是创建一个代码项目,然后创建一个引用代码项目的测试项目。一般来说,这是有道理的,测试需要知道如何实例化并调用他们正在测试的代码。在您描述的场景中,将对哪些测试进行操作?

也许你正在做一些不同的事情,比如加载要用反射进行测试的dll,或者你以某种方式断开它,例如通过服务调用,但在任何一种情况下它仍然感觉可能有更好的方法来发布测试DLL。

从用户的角度来看,我认为没有什么比给出一堆测试更令人沮丧,我无法看到内容并告诉他们确保它们违反我的代码。虽然我确信你已经花了很多时间来确定你的测试名称,但为了确保每项测试只测试一项显而易见的事情,并确保所有测试失败都会提供有意义的反馈,我不禁感到喜欢最终的结果将是人们在试图修复测试时花费数小时,因为他们误解了测试的要求,如果他们能够真正读取测试代码就可以避免。

除了怀疑之外,如果你确实需要这样做,那么一种方法是给他们一个项目+一个编译的程序集。已编译的程序集中包含您的实际测试,您的源项目只包含使用继承包装测试项目的类。所以,public class TestWrapper : SuperSecretTests。测试引擎将从基类引入测试,而不需要基类代码。

您还可以要求通过命令行运行这些测试,而不是从visual studio中运行。 mstest and vstest.console都允许您指定包含要运行的测试的dll。

答案 1 :(得分:1)

此问题已通过EnableBaseClassTestMethodsFromOtherAssemblies中的参数RunSettings进行了解析,该参数现已默认启用。

https://github.com/microsoft/testfx/issues/23

答案 2 :(得分:0)

您所要求的几乎不可能实现,因为测试框架往往是动态的。最失败的一件事是查找元素(UI 测试),因此,如果我无法更改或向框架中的查找器方法添加代码(因为它们在 dll 中),那么我就在小溪上因为这是经常发生的事情。或者添加任何其他可能需要的助手。换句话说,为框架创建 dll 可能不是要走的路。为框架创建一个存储库,其中只有架构师可以对其进行更改,其他人可以根据需要进行克隆,这可能是一种更简单的方法,但是,一些 DevOps 工程师可能会对此大发雷霆。