【问题标题】:How to do TDD in Visual Studio that separates production code from test code如何在 Visual Studio 中进行 TDD,将生产代码与测试代码分开
【发布时间】:2014-11-10 19:35:03
【问题描述】:

在典型的 Java IDE(比如 Intellij)中,工作测试驱动开发 (TDD) 风格意味着非常高效的工作流程,并且在您通过测试完成代码后几乎不需要修改或更改。

Java 项目与 C# 解决方案一样,有多种将生产代码与测试代码分开的方式,但通常有两个并行的目录结构

  • 源代码
  • 测试

或者测试在 src 树中被命名空间分隔。然后在这个主题上无穷无尽的变化。

使用 Intellij 之类的东西,我可以创建我的“测试类/方法”,开始编码,随时生成对象,并且它们通常会出现在正确的位置,即生产代码所在的位置成为。当我完成时,我完成了。 Java 世界中的工具和 IDE 支持这 110%。

现在体验 Visual Studio(或者实际上是 R# 体验)。目前我在 C# 中进行 TDD 的(简化的)工作流程是这样的(使用 R#):

  1. 在测试项目中创建测试类
  2. 创建测试方法
  3. 开始编码.. 生成类、接口等。我根据 R# 默认在与测试类相同的文件中生成代码。 ...
  4. 完成后,我会转到每个类/接口/任何内容,并将文件移动到与其名称匹配的单独文件中(ctrl+enter 操作)。
  5. 转到解决方案资源管理器并将类从测试项目拖放到生产项目中。

我想摆脱所有 4 和 5。我还希望我的类在步骤 3 中直接在生产项目中生成。

我已经到处搜索了可以帮助我解决此问题的 Visual Studio 扩展。

问题 1:我怎样才能像现在这样通过 TDD 提高工作效率?

问题 2:我是否应该采用另一种 TDD 工作流/结构,最终在 Visual Studio 中为我提供更好的 TDD 体验? (这是一个替代问题

无人回答 但请花时间在 Resharper https://youtrack.jetbrains.com/issue/RSRP-424370 中为这个功能投票

【问题讨论】:

  • 否决者请解释一下?这是一个很好的问题,有谁知道如何使用Generate Method Stub 来实现这一点 - 即直接在哪里(解决方案\项目\类)应该创建存根?对我来说,这个功能对于 JetBrains 的人来说似乎是个好主意。
  • 从创建单独的文件开始,然后使用 Window -> Split。
  • @mxmissile 请详细说明如何使用拆分窗口来避免第 4 步和第 5 步。我很感兴趣!
  • 我不明白这样做 3 的原因。您为什么不创建最终会用到的生产代码?
  • @BrianRasmussen 我不确定如何解决这个问题。也许我对 TDD 持极端态度,但我实际上希望当我编写代码时它不存在,我希望 IDE 只是“按我说的去做”。我的意思是,编辑可以自己解决所有问题,那我为什么要这样做。叫我懒惰,但我相信这是在编码方面非常务实的关键之一。

标签: c# visual-studio tdd resharper


【解决方案1】:

您可以使用 Generate Method Stub 功能在 Visual Studio 中删除第 4 步和第 5 步,Resharper 有点让我分心

创建两个项目:

解决方案
|项目1
_ Quiz.cs
|单元测试项目
_ UnitTestClassQuiz.cs


1. 在 Project1 中创建一个名为 Quiz 的 empty 类。
2. 在 UnitTestClassQuiz.cs 中创建一个单元测试,例如:
using Project1;
private class UnitTestClassQuiz
{
[TestMethod]
public void ShouldReturnDivisibles()
{
  //Arrange
  Quiz q = new Quiz();

  //Act
  var actual = q.ReturnDivisibles(60) 

此时VS在'ReturnDivisibles'函数下会有一条红色的波浪线,因为它没有声明!将鼠标悬停在这个未声明的 'ReturnDivisibles' 函数上,你会看到一个蓝色的小下划线/下划线,单击它,它会给你一个上下文菜单,其中包含“生成方法存根”选项。

当您生成方法存根时,将在 Project1 的 Quiz 类中创建一个函数,例如:

public object ReturnDivisibles(int p)
{
  throw new NotImplementedException();
}

【讨论】:

  • 对不起 Jeremy,但我不想像示例中那样手动创建类。 Resharper 已经按照您的描述工作。摆脱 4 和 5 最终需要在步骤 3 中的正确位置自动创建它(事实并非如此)。
  • 我不想手动创建类 - 我认为您可能不得不妥协(第 3 步)。如果不手动创建要在所需项目中测试的类,Visual Studio、Eclipse、ReSharper 等如何知道在哪里生成方法存根?
  • 我现在每天都在妥协。在 IntelliJ 中,它会弹出一个小对话框询问位置,但默认设置为生产并具有适当的命名空间,因此基本上只需按 Enter。它应该完全像用于创建测试的 Visual Studio 扩展一样工作,但反过来。该扩展默认为约定的假设。
  • 查看 VS 扩展,应该不会太难搞定 :)
  • 请在 atlassian 为这个问题投票 - youtrack.jetbrains.com/issue/RSRP-424370
猜你喜欢
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多