小编KCh*_*oux的帖子

从单独的NUnit测试库引用主项目

我是单元测试的新手,大学毕业后,突然负责自己开发和维护一个相当大的应用程序.之前的开发人员(刚刚离开公司)包括NUnit和项目参考,在几个类的底部写了几个空的测试装置,从来没有做过任何其他事情.

我担心如果我现在不开始编写单元测试,而我正在重构和学习系统,我将永远不会完成它们,但我无法理解如何正确设置我的测试项目.

有人告诉我,我应该将我的测试项目作为一个单独Class Library的解决方案,所以我做了一个OurApplication.Test Library项目.我不知道如何引用我将在其中测试的项目.

在线指南说它指向我的主项目的.DLL ......但没有一个.我们的项目是一个独立的应用程序,不会生成一个DLL,我不确定在这种情况下我应该做什么.

任何关于这里有什么问题的建议,或指向更全面的指南的建议都将不胜感激.我想以正确的方式完成这项工作,并尽快完成.

c# nunit unit-testing projects-and-solutions

3
推荐指数
1
解决办法
1171
查看次数

是否可以使用GoTo?

我目前正在.Net Framework 2.0中用C#重写旧的VB6程序(不是我的选择,它是由公司决定的).在大多数情况下,事情进展顺利.该程序测量来自精密磨床的输入数据,并显示图形和刻度盘以显示精度.

最初的程序员是机械工程师,但不是软件工程师.该程序有效,但这里和那里有一些草率的代码.最值得注意的是,我遇到了一些GoTo语句.在必要时将事物放在一个循环中并且从中获得相同的功能非常容易.

我遇到了原始代码中的一个案例,然而,似乎GoTo不仅仅是模拟一个循环.它有几个不同的退出条件.它看起来像这样(不是实际的代码,只是我做的简短演示):

VB6代码

Public Sub Tick()
    Dim condition1 As Boolean
    Dim condition2 As Boolean
    Dim testNumber As Integer

    beginning:    'The GoTo label'

    ' (... Some Other Code Here ...)'

    If condition1 = True Then
        goto beginning
    Else
        ' (... Do some calculation ...)'
    End If

    If condition2 = True Then
        ' (... Do some calculation ...)'
        goto beginning
    End If

    Select Case testNumber
        Case 1: '(... Some code ...)'
        Case 2: '(... Some code ...)'
        Case 3: …
Run Code Online (Sandbox Code Playgroud)

c# vb6 label goto

2
推荐指数
1
解决办法
533
查看次数

跳过Switch后的语句

我可能在这里(22岁)有一个高级时刻,但我无法弄清楚为什么C#正在跳过我之后的一个声明switch.代码如下:

switch (shape)
{
    case ToolShape.BasicTool:
        EditTool = (LastTool.ToolType == ToolShape.BasicTool)
            ? new BasicTool((BasicTool)LastTool)
            : new BasicTool(ToolNumber, BasicToolType.TypeA,
                "Tool " + ToolNumber, "", 1.0, 60.0, 0.0, 0.0, 0.0, 10.0);
        break;

    case ToolShape.AdvancedTool:
        EditTool = (LastTool.ToolType == ToolShape.AdvancedTool)
            ? new AdvancedTool((AdvancedTool)LastTool)
            : new AdvancedTool(AdvancedTool, "Tool " + ToolNumber, "", 1.0, 10.0, 2.0, 
                AdvancedTool.Light, AdvancedTool.Round);
        break;

    case ToolShape.SpecialTool:
        EditTool = (LastTool.ToolType == ToolShape.SpecialTool)
            ? new SpecialTool((SpecialTool)LastTool)
            : new SpecialTool(SpecialTool, "Tool " + ToolNumber, "", 
                1.0, 1.0, 90.0);
        break; …
Run Code Online (Sandbox Code Playgroud)

c# debugging switch-statement control-flow

1
推荐指数
1
解决办法
712
查看次数

同时为2个框架构建Visual Studio项目

我在我们的两个内部项目中使用了一些类库.其中一个内部项目针对.NET 4.0框架,而另一个针对.NET 2.0.我正在使用LinqBridge来获得2.0项目中更高版本.NET的一些细节.

为了在两个项目中正确使用类库,我需要将一个版本(使用LinqBridge)编译为.NET 2.0 Framework,将另一个版本(使用标准System.Linq)编译为.NET 4.0.

我想避免每次都手动执行此操作.我希望有一种方法可以在Build Events部分中指定当前目标框架的内容,但看起来没有宏.我一般不熟悉手动编辑构建配置.为单个项目定位两个框架的正确方法是什么?

c# build-automation visual-studio-2010

1
推荐指数
1
解决办法
618
查看次数

正则表达式Tag-Within-Tag

我有一个相当简单的正则表达式问题,我还没有想到一个小小的个人实验.

在字符串中,我可能有几个<tag>[some characters here]我需要匹配的字符串.显而易见的方法是使用/<tag>\[.*?\]/正则表达式来匹配在<tag>[之前和之后的任何字符].

但是,我希望能够拥有<tag>s <tag>.这会导致问题.如果我有以下内容:

<tag>[some characters <tag>[in here] to match]
Run Code Online (Sandbox Code Playgroud)

一旦到达第一个结束括号,正则表达式就会停止匹配,并且完全无法匹配语句的最后部分.我试图通过告诉正则表达式忽略任何内部<tag>s 来解决问题,所以我可以稍后对剥离的内容进行匹配.我还没有完全开始工作.我最接近的是:

/<tag>\[(.*?(?:<tag>\[.*?\])*?.*?)\]/
Run Code Online (Sandbox Code Playgroud)

哪个不太合适.我希望它能匹配任意数量的字符,以及任何内部标记(如果它们存在).然而,它仍然有第一个结束括号的麻烦.

也许那些在正则表达式方面表现更好的人知道一个很好的解决方案.

ruby regex

0
推荐指数
1
解决办法
624
查看次数

模式匹配功能

在Scala玩游戏时,我遇到了一些我认为应该可行的事情,但我不知道该怎么办.

我正在返回一个由给定的最小值/最大值限制的值.使用if-else语句,函数将如下所示:

def set(n: Int, min: Int, max: Int): Int = 
{
  if (n < min) return min
  if (n > max) return max
  return n
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以通过模式匹配来实现(优雅).我尝试了以下,但它在语法上是不正确的:

def set(n: Int, min: Int, max: Int): Int = n match 
{
  case (n < min) => min
  case (n > max) => max
  case _ => n
}
Run Code Online (Sandbox Code Playgroud)

我认为有一种方法可以通过混合case和if语句来实现,但是当我完成它时,我可能只是使用标准的if/else链.是否有正确的语法来做我正在尝试的事情?

syntax scala pattern-matching

0
推荐指数
1
解决办法
207
查看次数