【问题标题】:Visual Studio: Exclude a class if compiling as a dllVisual Studio:如果编译为 dll,则排除一个类
【发布时间】:2013-04-22 11:51:56
【问题描述】:

我有一个 DLL 项目,我经常将其编译为 .exe,以便我可以轻松地测试其中的类。一个类包含一个Main() 方法,当我将它编译为.dll 文件时它是无用的。每当我将它编译为类库时,我想自动从项目中排除这个类。看来我一定是最早遇到这个问题的人之一,因为全能的 Google 似乎没有回答我的问题:我该怎么做?

【问题讨论】:

  • 创建一个单元测试项目并在其中测试您的 .DLL
  • 单元测试不就是简单的用来测试不同方法的吗?我想测试整个程序。
  • 问题是,它不是一个程序。正如您所说,您所拥有的基本症结是.DLL,因此它不是应用程序。无论如何,测试您的方法本质上就是您想要实现的目标,不是吗?
  • exe需要是同一个项目吗?您可能只有 2 个项目:exe 将引用 dll 像普通 并添加一个 Main 方法等...这样您就没有改变行为,甚至没有需要不断改变项目配置
  • @MarcGravell 我想这就是我要做的。单元测试方法在我的项目中不可用。

标签: c# visual-studio-2010 dll projects-and-solutions


【解决方案1】:

我会认真考虑单元测试是为了不断地做这件事。即使没有正确实施单元测试,您也只是将其用作中间调试器。我什至会说做一个单元测试项目作为调试代码的控制台应用程序,在获得访问权方面,它会让你的生活更轻松,如果你希望在未来实现某种形式的单元可以测试一下。

[TestMethod]
public class YourClassNameTests
{
  public T YourObject;
  [TestInitialize()]
  public void Initializer()
  {
    YourObject = new T();
  }
  [TestMethod()]
  public void YourMethodTest()
  {
    //Arrange
    YourObject.ReliantProperty = 1;
    //Act
    var objResult = YourObject.YourMethod();
    //Assert
    Assert.IsTrue(objResult == 1);
  }
}

【讨论】:

  • 我想做的测试不是单元测试;他们一般测试 DLL 的功能。我正在处理实时采集的数据,我需要测试程序来显示输出,以便我可以验证它是否正确。无法以编程方式对其进行验证。
  • 您应该考虑添加一个控制台应用程序项目来进行测试,尽管 Luke 不建议这样做 - 一个单独的项目来执行测试的想法听起来是正确的答案。
【解决方案2】:

你有几个我能想到的解决方案:

1) 使用条件编译器选项。例如,只有在调试时才包含它

#if 调试

public void Main() {  
// Do Stuff  
}  

#endif

2) 创建 Main 方法 internal,或将其移至您可以运行的测试项目中。然后你要么直接使用它,要么确保你的测试 DLL 可以看到内部方法。

3) 将 Main 方法移出到引用原始 DLL 的完全不同的 .exe 中。 (这类似于不使用测试框架的选项 2)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多