1

我希望能够使用 MSpec 或其他 BDD/TDD 框架来测试针对 .net 微框架的代码。不幸的是,从非 MF 程序集引用 MF(微框架)程序集是不可能的。很遗憾,因为它只是 C# 代码,而单元测试在这种情况下非常有用。有没有人想出一种方法来为.net 微框架项目进行单元测试(最好使用 MSpec)?

4

2 回答 2

2

我下载了最新的 Machine.Specifications 并将所有代码移动到一个微框架类库项目中。我只有 323 个编译错误。需要改变的事情的简短清单......

  1. 没有扩展方法
  2. 没有泛型
  3. 没有 LINQ
  4. 没有自定义属性
  5. 没有表达式树

是否值得尝试在这个 .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");
    }
}
于 2011-10-24T21:40:21.843 回答
0

另一种选择——有点痛苦,可能不适合——是在微框架旁边创建一个虚拟的“正常”.Net3.5/.Net4.0 项目。由于微框架 C# 几乎与所有源代码兼容,因此您也可以将源文件添加到虚拟项目中 - 即源文件将属于两个项目。然后,#IFDEFS 将需要一些最小的条件编译,例如围绕 Microsoft.Spot 命名空间包含。

此时,虚拟项目可以使用任何正常的测试框架 NUinit、Specflow 等进行完全测试。显然,这种方法需要一定程度的谨慎和小心——注意主机字节顺序问题等,当然这两个项目必须并行维护。

另一种选择是通过模拟器项目进行测试,这将是更彻底的方法。但是虚拟项目方法当然可以有利于 WRT 快速开发、TDD 等。

于 2011-11-10T09:09:59.587 回答