2016-12-01 30 views
0

我正在寻找方法来快速调试我刚刚写的代码,看看它的行为是否正确,我所有的假设都是正确的。我不想运行完整的系统,因为部分基础设施无法使用此代码。我使用单元测试,但我觉得它很麻烦。有更好的吗?如何快速调试我的代码在孤立 - 内部,只有开发人员,扔掉测试

目标是:

  • 调试任何代码迅速而不产生额外的项目,应用程序等
  • 轻松重复调试。
  • 测试是为了这个特定的目的,可能会使用固定的文件路径,数据库连接,任何东西。通常在正确的事情后扔掉。
  • 需要访问我的对象的内部成员。
  • 访问私有成员将是很好的好处。
  • 我很好,直接在我的对象中编写测试函数。其实这是首选。

做这将是梦想的方式:

namespace Aaa 
{ 
    class SomeClass 
    { 
     public string Name { get; private set; } 

     public SomeClass(string name, int value) 
     { 
      this.Name = name; 
      InitializeSth(); 
     } 

     public DoSomethingPublic() 
     { 
      // ... 
     } 

     private DoSomethingPrivate() 
     { 
      // ... 
     } 

     public static void TestThis()   // <-- debug this 
     { 
      var obj = new SomeClass("a", 1); // <-- put breakpoint here 
      obj.DoSomethingPublic(); 
      obj.DoSomethingPrivate(); 
     } 
    } 
} 

这是可能在Java中,是这样一个伟大的事情。这也允许访问私人事物。

但我也接受其他选项。在VS2015中有这样的事吗?

我迄今为止尝试:

  • 即时窗口 - 我不认为它可以被配置为这样的目的
  • C#互动 - 这似乎并不支持调试。还是呢?
  • 单元测试 - 这是我现在使用的(使用MSTest)。但我觉得非常麻烦,这是因为:
    • 我需要创建新的项目,或者包含到MS测试程序集的引用
    • 我需要额外的步骤来访问内部类型和成员,或改变的事情公开(我不喜欢这样)。
    • 更多访问私人会员的步骤。
    • 如果在项目中使用单元测试,我会与其他测试混淆。
    • 再次启动调试需要许多点击,而不是sth + sth + F5。
    • 其中一些项目有一些解决方法,但总的来说,测试基础架构似乎是为了不同的目的而设计的,我总是有一种感觉,我正在与它作斗争。

我也发现了大约有调试任何静态功能的能力ReSharper的一些信息。但我不想使用Resharper,主要是因为性能。

+0

嗨Arek,这个问题呢?你能从我们的建议中获得有用的信息吗?任何更新?:) –

+0

我想我找到了一些方法,但我需要测试它。让我从寒假回来,我会在下周发布一些东西。 – Arek

+0

我期待您的回音。如果你有更好的解决方案,请随时分享答案,当然,如果有任何答复对你有帮助,你也可以将它标记为答案,有一个愉快的假期:) –

回答

0

回答我自己的问题 - 看起来我没评估立即窗口en ough。

它可以调用任何静态方法或者使用

  • 立即窗口(只需键入TestThis()
  • 命令窗口(类型?TestThis()Debug.EvaluateStatement TestThis()

这甚至允许调用私有静态方法。如果需要启动方法并在调试器中执行该方法,那么项目将在启动之前构建,因此它将在任何断点处停止。

总结:按Alt+Ctrl+I进入即时窗口,输入方法名称并带圆括号,然后按Enter

有两个缺点:

  • 如果方法不在主类(一个Main法),你必须使用完整的命名空间和类名,例如MyCompany.MyApp.Logic.SomeClass.TestMethod()运行它
  • 到再次开始调试,你必须立即进入窗口并用Up-Arrow, Enter调用最后的命令。这比右击测试并选择“调试此测试”要好,但不是最佳。

如果您知道更好的或者更好地解决这两个问题的方法,请添加一个答案。我寻找了相当长的时间来找到一个键盘快捷键来重复上一个立即窗口命令,但找不到一个。我不会将此答案标记为现在接受,以防发布更好的内容。

+0

实际上它比其他解决方法更好,当然,您也可以使用命令行窗口直接在VS IDE中执行命令或别名,当然,它确实具有不同的功能:http:// stackoverflow。 COM /问题/ 1557371 /视觉工作室命令窗口。我建议你在其他社区成员可以提供其他答案之前将其标记为临时答案:)。祝你今天愉快! –

+0

确实如此。感谢您的有用链接。我希望能够快速地将某个键盘键绑定到带有参数的命令上,所以我可以绑定即。 'sth + sth + F5'到'Debug.EvaluateStatement SomeNamespace.SomeClass.SomeMethod',它可以像_选择当前的测试方法_一样工作。 – Arek

0

要调试一个方法而不运行整个应用程序,我经常在VS IDE中使用单元测试,因为它不会真的影响我们的应用程序的开发。

我也得到了使用ReSharper的工具之前的方法:https://blog.jetbrains.com/dotnet/2015/08/28/run-configurations-debug-any-static-method-in-visual-studio-and-more/

在VS IDE,直接调试方法,无需调试/运行的应用程序,它确实没有比单元测试项目更好的建议。

当然,它也有其他第三方工具,如果你想调试代码,但不运行应用程序:

http://www.linqpad.net/

+0

杰克:因为我在问题中写道,我已经使用单元测试,但发现它不是最优的,并寻找更好的选择。还有一个问题中提到了Resharper方法。 – Arek

+0

感谢您的回应,Arek没有其他更好的解决方法,正如您所说的使用单元测试,在使用单元测试期间的一种更好的方法,您可以使用VS2017 RC中的新功能“实时单元测试”:https:/ /blogs.msdn.microsoft.com/visualstudio/2016/11/18/live-unit-testing-visual-studio-2017-rc/。或者在VS IDE中使用“编辑并继续”功能的调试功能,以便在调试时编辑代码。如果它确实不符合您的要求,我可以帮助您向产品团队提交功能请求。 –

0

看看这个答案:#if DEBUG vs. Conditional(“DEBUG”)

基本上,你可以使用如下所示:

#if DEBUG 
public void DoSomething() { } 
#endif 

public void Foo() 
{ 
    #if DEBUG 
    DoSomething(); 
    #endif 
} 
+0

这与我发布的问题无关,或者我错过了什么? – Arek

相关问题