2

我有大量的类都使用相同的接口。这是这段代码第一次进行单元测试,所以我试图想出最好的方法来生成所有这些测试,或者至少是类的结构。

我知道 EF 中使用 T4 模板根据模型生成多个文件。有没有一种方法可以在 T4 模板中指定,我希望它查看所有实现接口的类并为每个类生成一个单元测试类。或者,如果它更容易,所有类都在同一个文件夹中,所以如果我可以将它指向那个文件夹,它可能会很好。

完成后,我可以使用规范填写每个单元测试类的详细信息。我显然必须删除 T4 文件,这样它就不会覆盖我添加到类中的代码,也许也有办法做到这一点?

4

3 回答 3

3

看看这篇博文:

http://t4-editor.tangible-engineering.com/blog/how-to-generate-multiple-output-files-from-a-single-t4-template.html

它应该使您能够使用单个 .tt 文件生成多个输出。我(几乎)以与您相同的方式使用它,我基于一个 xml 文件生成一大类方法(3000 行),然后生成另一个包含这些方法的单元测试的文件。具有讽刺意味的是,单元测试指出了我生成的大类中的几个错误,即使也生成了单元测试。

于 2013-05-23T21:32:18.490 回答
0

T4 模板始终只生成一份输出,无论是设计时模板的一个输出文件还是运行时模板的一个字符串。因此,模板本身将无法为您生成多个文件。尽管如此,只需少量代码,您就可以多次使用单个运行时模板,根据需要创建多个输出。

我建议创建一个简单的实用程序,与主项目分开,它将包含 T4 运行时模板和代码,例如,检查给定程序集或一堆给定源文件并使用 T4 运行时生成适当的测试框架模板并将其保存到每个感兴趣的类的文件中。我想这取决于所讨论的类的数量,是否值得花一点时间来创建这样的工具。

如果还不够清楚,请告诉我,我将尝试提供示例。

于 2013-04-09T12:54:49.827 回答
0

我正在一个新项目中做类似的事情,我想使用 T4 模板生成一些代码,这些代码与从特定类继承的所有类有关。(基本上写一个工厂生成器类来为每个派生类创建一个新实例,只给定一个包含类名的字符串,并且在运行时不使用反射收集每个类中的公共属性列表。这样,其他开发人员可以只需将新类添加到项目中,而不必担心将其绑定到我们的框架中。)

我还将源类保存在一个公共子文件夹中。

虽然我才刚刚开始设计模板的工作方式,但模板将在编译代码之前运行,所以我的过程将是:

  1. 对于子文件夹中的每个源代码文件:
    1. 将文件加载到内存中。
    2. 使用正则表达式来验证文件中的类是否继承自所需的基类。
    3. 使用正则表达式来提取我需要的数据。
  2. 使用我收集的数据(类名、公共属性名)编写输出类

这是Roslyn在分析代码以提取类和属性名称时可能有用的地方,但我暂时不会太花哨。我的方法将我们限制为每个文件一个类,并且只能使用我们正在编写的一种语言,但这是我们可以接受的配置约定。

您可能会发现这篇 MSDN 文章以及Oleg Sych 的博客和工具包很有用。Oleg 的 T4 工具箱包含一个模板,用于从单个 T4 模板生成多个输出文件。

于 2013-04-24T23:21:14.997 回答