5

Dynamics AX 2012 带有单元测试支持。

为了进行有意义的测试,需要提供一些测试数据(存储在数据库的表中)。

为了获得单元测试的可重现结果,我们需要在每次运行测试时将相同的数据存储在表中。现在的问题是,我们如何才能做到这一点?

我了解到可以将 TestSuite 的隔离级别设置为SysTestSuiteCompanyIsolateClass. 这将创建一个空公司并在运行测试后删除该公司。在该setup()方法中,我可以使用插入语句将我的测试数据填充到表中。这适用于小场景,但如果你有一个现实生活中的项目,它很快就会变得很麻烦。

我想知道是否有人提供如何在现实世界场景中使用 X++ 单元测试框架的实用解决方案。非常感谢任何输入。

4

4 回答 4

6

我同意在新的空公司中创建测试数据仅适用于相当琐碎的场景或您自己实现整个数据结构的场景。但是一旦需要现有的数据结构,这种方法就会变得非常耗时。

过去对我来说效果很好的一种方法是在现有公司中运行单元测试,该公司已经拥有运行测试所需的大部分配置数据(例如财务设置、库存设置……)。测试本身在ttsBegin-ttsAbort块中运行,因此单元测试实际上不会创建任何数据。

另一种方法是实现与测试无关的数据提供者方法,但创建经常在单元测试中使用的数据(例如,创建产品的方法)。创建一组有用的数据提供者方法需要一些时间,但是一旦它们存在,编写单元测试就会变得更快。请参阅SysTest 第五部分:测试执行(结果、运行程序和侦听器),了解 Microsoft 如何使用类似的方法(或者至少他们在 2007 年曾经使用过 AX 4.0)。

这两种方法也可以组合使用,您可以调用ttsBegin-ttsAbort块内的数据提供者方法来创建仅为单元测试所需的数据。

另一种有用的方法是使用doInsertdoUpdate创建您的测试数据,特别是如果您只对几个字段感兴趣并且不需要创建完全有效的记录。

于 2015-09-10T12:23:08.523 回答
4

我认为单元测试框架是事后才想到的。为了真正使用它,微软需要提供单元测试类,然后当你定制他们的代码时,你也定制了他们的单元测试。

因此,如果没有这些,您基本上只能编写单元测试,这些测试尝试包含基本代码以及您的修改,这是一项艰巨的任务。

我认为您可以实际使用它的地方是执行某些功能的独立定制,并且不是大量构建在基本代码上。以及与外部系统集成的定制。

于 2015-09-10T17:10:41.263 回答
3

好吧,从我的角度来看,您将无法利用比您从标准框架中指出的更多的东西。您可以做的更多是围绕发布管理。您可以使用目标数据设置集成环境,并在构建过程结束时将 nightbuild 模型推送到此环境中,然后运行测试。是的,它需要更多的努力来设置和维护它,但它是我迄今为止看到的唯一解决方案,可以拥有大量且一致的数据集来运行单元或集成测试。

于 2015-09-10T12:12:26.870 回答
0

为了进行有意义的测试,需要提供一些测试数据(存储在数据库的表中)。

正如其他人已经指出的那样——我发现最好利用现有公司来获取数据。就我而言,有几家现有的公司。

为了获得单元测试的可重现结果,我们需要在每次运行测试时将相同的数据存储在表中。现在的问题是,我们如何才能做到这一点?

我们已经构建了测试助手,帮助我们“运行测试”,自动化一个人会做的事情——让你已经将你的应用程序设计为可测试的。本质上,我们的测试类使用助手来运行测试,然后在验证它创建的数据时提供大部分价值。

我了解到可以将 TestSuite 的隔离级别设置为 SysTestSuiteCompanyIsolateClass。这将创建一个空公司并在运行测试后删除该公司。在 setup() 方法中,我可以使用插入语句将我的测试数据填充到表中。这适用于小场景,但如果你有一个现实生活中的项目,它很快就会变得很麻烦。

在我们的情况下,我发现这并不实用,所以我们没有利用它。

我想知道是否有人提供如何在现实世界场景中使用 X++ 单元测试框架的实用解决方案。非常感谢任何输入。

我们一直在使用如上所述的测试框架,它一直在为我们工作。关键是找到正确的场景进行测试,也为编写可测试的类提供了良好的基础。

于 2016-10-18T23:14:47.010 回答