如何为具有using语句的方法编写单元测试?
例如,假设我有一个方法Foo.
public bool Foo()
{
using (IMyDisposableClass client = new MyDisposableClass())
{
return client.SomeOtherMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能测试上面的代码?
有时我选择不手动使用using语句和Dispose()对象.我希望有人会告诉我一个我可以使用的技巧.
假设您有一个方法应该创建并返回某种类型的数组.如果数组没有填充,该怎么办?你返回一个空数组还是null/nothing?
我有一个包含450,000多行条目的文件.每个条目的长度约为7个字符.我想知道的是这个文件的独特字符.
例如,如果我的文件如下;
Run Code Online (Sandbox Code Playgroud)Entry ----- Yabba Dabba Doo
那么结果就是
独特人物:{abdoy}
注意我不关心案例,也不需要订购结果.有些东西告诉我这对Linux人来说很容易解决.
我正在寻找一个非常快速的解决方案.我真的不想创建代码来遍历每个条目,遍历每个字符......等等.我正在寻找一个很好的脚本解决方案.
通过快速的,我的意思是快速实现......不一定运行速度快.
我正在尝试用巧妙,清晰和简单的方法来编写描述给定范围内整数序列的代码.
这是一个例子:
IEnumerable<int> EnumerateIntegerRange(int from, int to)
{
for (int i = from; i <= to; i++)
{
yield return i;
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在处理的代码库中充斥着硬编码值.
我将所有硬编码值视为代码气味,并尝试在可能的情况下消除它们......但是有些情况我不确定.
以下是我能想到的两个例子让我想知道最佳做法是什么:
1. MyTextBox.Text = someCondition ? "Yes" : "No"
2. double myPercentage = myValue / 100;
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,最好的做法是创建一个允许我在配置文件中执行MyHelper.Yes和MyHelper.No或者类似的东西的类(虽然它不太可能改变,谁知道是否有可能曾经是一个案例,其用法将区分大小写).
在第二种情况下,除非数学定律改变,否则找不到百分比的百分比不可能改变......但我仍然想知道是否有更好的方法.
任何人都可以建议一种适当的方式来处理这种硬编码吗?任何人都可以想到硬编码是可接受的做法吗?
在C#中,关于要创建什么类型,应该拥有哪些成员以及应该拥有哪些名称空间的问题是OO设计的问题.它们不是我在这里感兴趣的问题.
相反,我想问一下如何将这些存储在磁盘工件中.以下是一些示例规则:
将所有程序集的类型放在单个源文件中.一位做过此事的朋友说"文件是一个僵尸代码组织工具;今天我使用classview和Collapse to Definitions来浏览我的代码".
将所有代码放在一个程序集中.使部署和版本控制更简单.
目录结构反映命名空间结构
每个命名空间都有自己的程序集
每种类型都有自己的组装.(列为一个极端的例子.)
每种类型都有自己的源文件.
每个成员都有自己的文件; 每种类型都有自己的目录.(列为一个极端的例子.)
class MyBase
{
protected object PropertyOfBase { get; set; }
}
class MyType : MyBase
{
void MyMethod(MyBase parameter)
{
// I am looking for:
object p = parameter.PropertyOfBase; // error CS1540: Cannot access protected member 'MyBase.PropertyOfBase' via a qualifier of type 'MyBase'; the qualifier must be of type 'MyType' (or derived from it)
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法从没有反射的扩展类型获取类型参数的受保护属性?由于扩展类通过其基类型知道属性,因此如果可能的话,它将是有意义的.
通常,我偶尔会有一系列嵌套宏,其定义中包含一些预处理器条件元素.这些可能很难调试,因为很难直接看到正在执行的代码.
前一段时间我依稀记得找到一个编译器(gcc)标志来扩展它们,但是我在实践中遇到这个问题很困难.
在我的上一个项目中,我们使用MSBuild作为脚本语言.(是的,真的!)我们还编写了数百个自定义MSBuild任务,用于在C#中更有意义的部分.(我甚至编写了一个MSBuild任务来为MSBuild任务生成样板代码.是的,它会自行消耗.)
虽然我不建议其他人采用相同的方法,但我发现非常有用的一件事是内置的依赖关系管理.正如您所期望的那样,表达依赖关系很容易,让MSBuild能够满足它们.例如,我们软件中的几乎每一步都要求将某组文件复制到某个位置.你可以轻松写:
Step1: CopyFiles
Step2: CopyFiles, Step1
Run Code Online (Sandbox Code Playgroud)
当你执行时Step2,它只会复制一次文件.
构建和满足依赖树在软件中非常常见.我希望MSBuild团队能够获取他们的依赖管理代码,将其与MSBuild分离,并将其移至.NET Framework,任何人都可以使用它.Baring that,您认为以这种方式管理依赖项的最佳选择是什么?
.net msbuild dependency-injection dependency-management refix
要立即切换所有例外,我必须:
Thrown"公共语言运行时Eceptions"旁边的列
通常我想停止所有异常,但是当使用在主线情况下使用异常的代码时,我需要禁用该行为.按键会很好.
c# ×5
.net ×2
debugging ×2
c++ ×1
coding-style ×1
exception ×1
gcc ×1
hard-coding ×1
idisposable ×1
legacy-code ×1
linq ×1
macros ×1
msbuild ×1
oop ×1
optimization ×1
parsing ×1
refix ×1
scripting ×1
search ×1
sequences ×1
unit-testing ×1