C# 如何在VisualStudio中进行TDD,将生产代码与测试代码分离

C# 如何在VisualStudio中进行TDD,将生产代码与测试代码分离,c#,visual-studio,tdd,resharper,C#,Visual Studio,Tdd,Resharper,在典型的javaide(比如Intellij)中,使用测试驱动开发(TDD)风格意味着一个非常高效的工作流,并且在完成测试后几乎不需要修改或替换代码 Java项目,就像C#解决方案一样,有各种不同的风格将生产代码与测试代码分离,但通常有两种并行的目录结构 src 试验 或者测试在src树中由名称空间分隔。然后是关于这个主题的无休止的变化 使用Intellij之类的工具,我可以创建我的“测试类/方法”,开始编码,在运行时动态生成对象,它们通常会在正确的位置结束,也就是生产代码应该在的位置。当我

在典型的javaide(比如Intellij)中,使用测试驱动开发(TDD)风格意味着一个非常高效的工作流,并且在完成测试后几乎不需要修改或替换代码

Java项目,就像C#解决方案一样,有各种不同的风格将生产代码与测试代码分离,但通常有两种并行的目录结构

  • src
  • 试验
或者测试在src树中由名称空间分隔。然后是关于这个主题的无休止的变化

使用Intellij之类的工具,我可以创建我的“测试类/方法”,开始编码,在运行时动态生成对象,它们通常会在正确的位置结束,也就是生产代码应该在的位置。当我完成时,我就完成了。Java世界中的工具和IDE支持这110%

现在是体验VisualStudio(实际上是R#体验)。目前,我在C#中进行TDD的(简化的)工作流程如下(使用R#):

  • 在测试项目中创建测试类
  • 创建测试方法
  • 开始编码。。生成类、接口等。我按照R#default在与测试类相同的文件中生成代码。
  • 完成后,我转到每个类/接口/任何内容,并将文件移动到与其名称匹配的单独文件中(ctrl+enter action)
  • 转到解决方案资源管理器,将类从测试项目拖放到生产项目上
  • 我想把所有的东西都处理掉。我还希望我的类在第3步的生产项目中直接生成

    我到处寻找VisualStudio的扩展,可以帮助我解决这个问题

    问题1:我如何才能像今天这样利用TDD提高工作效率

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

    仍无人接听
    但是请花点时间在Resharper中投票支持此功能

    您可以通过Visual Studio使用此功能删除步骤4和5,Resharper有点让我分心

    创建两个项目:

    解决方案
    |项目1
    _quick.cs
    |UnitTestProject
    _unittestclassquick.cs


    1.在Project1中创建一个名为quick的空类。
    2.在UnitTestClassQuike.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中的测验类中创建一个函数,例如:

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

    请解释一下?这是一个很好的问题,是否有人知道如何使用-ie direct在何处(solution\project\class)创建存根来实现这一点?对我来说,这项功能对于JetBrains的员工来说似乎是个好主意。首先创建单独的文件,然后使用Window->Split。@请详细说明如何使用Split Window避免第4步和第5步。我很感兴趣!我不明白这样做的原因。你为什么不创建最终会用到的生产代码?@BrianRasmussen我不知道如何解决这个问题。也许我对TDD有点极端,但我实际上希望当我编写代码时,它并不存在,我希望IDE只是“按照我告诉它的去做”。我的意思是,编辑可以自己解决所有问题,所以我为什么要这么做呢。请叫我lazy,但我相信这是在编码方面非常务实的关键之一。抱歉,Jeremy,但我不想像您在示例中那样手动创建类。Resharper已经按照您描述的那样工作了。摆脱4和5最终需要在第3步中自动在正确的位置创建该类(事实并非如此)。我不想手动创建该类-我认为您可能不得不妥协这一点(第3步)。如果不手动创建要在所需项目中测试的类,Visual Studio、Eclipse、ReSharper等如何知道在何处生成方法存根?我现在每天都在妥协。在IntelliJ中,它弹出一个小对话框,询问位置,但默认设置为production,并具有适当的名称空间,因此基本上只需按enter键。它的工作原理应该与创建测试的VisualStudio扩展完全相同,但不包括混响。该扩展默认为按约定进行的假设。查看VS扩展,应该不太难实现:)请在atlassian对该问题进行投票-