我希望能够使用 MSpec 或其他 BDD/TDD 框架来测试针对 .net 微框架的代码。不幸的是,从非 MF 程序集引用 MF(微框架)程序集是不可能的。很遗憾,因为它只是 C# 代码,而单元测试在这种情况下非常有用。有没有人想出一种方法来为.net 微框架项目进行单元测试(最好使用 MSpec)?
2 回答
我下载了最新的 Machine.Specifications 并将所有代码移动到一个微框架类库项目中。我只有 323 个编译错误。需要改变的事情的简短清单......
- 没有扩展方法
- 没有泛型
- 没有 LINQ
- 没有自定义属性
- 没有表达式树
是否值得尝试在这个 .NET Framework 系列上重建 MSpec?可能不是。这是作者/提交者想要跟上的吗?可能不是。
我尝试根据这个愚蠢的论坛线程自定义项目类型 GUID 和 CSharp 导入,结果出现了一堆错误。包括“编译器不支持的错误”。
错误 4 TestableMicroLibrary.Tests D:\TestableMicroLibrary\TestableMicroLibrary.Tests\MMP 0x81010009
我认为您将不得不自己动手。对测试类/方法使用约定和反射(关于唯一剩下的东西)。您可以继续使用行为驱动的风格,例如每个夹具的测试用例类。
public class When_doing_something_neat
{
public void It_should_frob_the_widget()
{
Assert.IsTrue(_widget.IsFrobbed);
}
}
并重建整个 Assert/Should 库(记住,没有扩展方法!)。
public static class Assert
{
public static void IsTrue(bool thing)
{
if(!thing) throw new AssertionException("It is not true");
}
}
另一种选择——有点痛苦,可能不适合——是在微框架旁边创建一个虚拟的“正常”.Net3.5/.Net4.0 项目。由于微框架 C# 几乎与所有源代码兼容,因此您也可以将源文件添加到虚拟项目中 - 即源文件将属于两个项目。然后,#IFDEFS 将需要一些最小的条件编译,例如围绕 Microsoft.Spot 命名空间包含。
此时,虚拟项目可以使用任何正常的测试框架 NUinit、Specflow 等进行完全测试。显然,这种方法需要一定程度的谨慎和小心——注意主机字节顺序问题等,当然这两个项目必须并行维护。
另一种选择是通过模拟器项目进行测试,这将是更彻底的方法。但是虚拟项目方法当然可以有利于 WRT 快速开发、TDD 等。