AX 演示:使用单元测试框架测试类
前端之家收集整理的这篇文章主要介绍了
AX 演示:使用单元测试框架测试类,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
原文:http://msdn.microsoft.com/en-us/library/bb410465.aspx
演示:使用单元测试框架测试类
AX集成了一个单元测试框架,该框架用于创建、运行及分析单元测试。在这个演示中,你将创建一个满足特定要求的Employee类,创建一个测试用例来测试类是否满足了这些要求。单元测试框架基于TDD(测试驱动开发)。关于TDD的更多信息,请查看测试驱动开发向导。TDD建议首先创建测试用例(这个时候由于没有写被测试的类的代码,所以测试用例运行会失败),然后创建类并书写代码以满足类的要求,并可以通过测试。下面的步骤提及了TDD过程,但目的是强调单元测试框架。在你创建和运行测试用例后,你可以查看代码覆盖率,为测试用例设置隔离等级。
类Employee需要符合以下要求:
- 但一个Employee类的实例被创建时,类的名字使用方法name来设置。
- Employee类有一个retire方法,在职员退休时调用retire。对于同一职员该方法只能被调用一次。
这一演示将阐述以下任务:
- 创建一个Employee类根(指只包含类声明没有任何方法和实现的类)
- 创建一个测试类
- 为测试用例设置数据
- 为name方法这一要求创建一个测试用例
- 运行测试用例retire方法这一要求创建一个测试用例
- 步骤代码覆盖率
- 设置隔离等级
先决条件
完成这一演示,你需要:
- Microsoft Dynamics AX
- 拥有包含开发权限的License
创建Employee类根
遵循TDD的原则,在写任何类的实现以前首先创建测试用例。为了减少编译错误,你需要先创建一个类根(class stub),只有一个类什么,没有任何实现。
创建Employee类
1. 打开Microsoft Dynamics AX。
2. 按CTRL+D打开应用程序对象树(AOT)。3. 在AOT上,右键单击Classes节点,然后点击‘New class’。
注释 |
Classes节点扩展出一个新的命名为Class1的类。 |
4. 右键单击Class1,点击Rename然后重新命名为Employee。
创建测试类
创建测试用例的时候,你需要创建一个类,其命名必须符合最佳实践以关联到被测试的类。测试类的名字为被测试类的名字加Test。在这一步骤里,你将创建一个继承自SysTestCase的子类EmployeeTest。
创建测试类
1. 右键单击Classes节点,然后点击New class。
2. 双击Class1打开代码编辑器。3. 在代码编辑器中,通过修改声明继承SysTestCase。并声明一个Employee类的实例。
class EmployeeTest extends SysTestCase
{
// Create a member variable named employee.
Employee employee;
}
为测试用例设置数据
在这一步骤中,你将创建一个Employee类的实例,它将被用在所以测试用例中。
为测试用例设置数据
1. 在AOT中,右键单击EmployeeTest,选择Override method,然后点击Setup。
2. 在代码编辑器中,按如下代码修改setUp方法。
public void setUp()
{
;
// Create an employee instance to use in test cases.
employee = new Employee("your name");
super();
}
为Name方法这一要求添加测试用例
在这一步骤中,你将添加一个测试用例。你将为类EmployeeTest添加一个新的方法,严重epmployee的name被正确设置。
为name要求添加测试用例
EmployeeTest类,选择New method。
2. 在代码编辑器中,按如下代码修改该方法。
void testName()
{
// Verify that the employee name is set correctly.
this.assertEquals("your name",employee.name());
}
现在如果运行这个测试用例会是失败的,你可以为这一测试用例书写特征代码以完成编译并可以使测试用例运行成功。并重写Employee类的new方法以接受一个字符串作为参数。
添加特征代码
AOT上,在classDeclaration方法节点上右键双击。
2. 在代码编辑器中,按如下代码修改声明。
class Employee
{
// Create member variables.
str name;
}
Employee 类节点,选择new。4. 在代码编辑器中,按如下代码修改new方法。
void new(str _name)
{
;
name = _name;
}
5. 在Employee类,点击6. 在代码编辑器中,按如下代码修改该方法。
public str name()
{
;
// Return the expected string.
return name;
}
7. 在Employee类并点击Compile。8. 右键单击Compile。
运行测试用例
在这一步骤中,你将通过单元测试工具栏来运行测试用例。运行测试用例的更多信息请查看:如何运行测试用例。
运行测试用例
- 在AOT上,右键单击EmployeeTest类,选择Add-Ins,然后点击Run tests。
注释 |
将会打开单元测试工具栏并且运行测试。由于只添加了一个测试用例,所以运行结果是‘1 run,0 Failed’。 |
在这一步骤中,你将修改测试用例以使测试失败。在TDD中,首先都是创建一个运行失败的测试用例。由于编译的原因,在这个例子中,首先便创建了运行会成功的测试用例。
使测试用例失败
AOT上,双击Employee 类的name方法节点。In the AOT,in the Employee class node,double-click the name method.
public str name()
{
;
// Return the expected string.
// return name;
// Return an empty string to make the test case fail.
return "";
}
4. 在单元测试工具栏上,点击Run按钮。
运行结果显示‘Failed’。Infolog显示预期的结果和实际的结果。 Error: [EmployeeTest.testName]Failure: Assertion Failed! (Expected: your name; Actual: ) |
Infolog中,可以点击Edit按钮打开代码编辑器并定位到断言失败的地方。6. 在name方法。7. 在代码编辑器中,按如下代码修改该方法。
public str name()
{
// Return the expected string.
return name;
// Return an empty string to make the test case fail.
// return "";
}
8. 在Employee类,并点击
为Retire需求添加测试用例
在这一步骤中,你将为退休这一需求创建测试用例。你将给EmployeeTest添加一个新的方法来完成这一测试用例。这样测试用例用于验证对应同一职员,如果retire方法被调用超过一次,将会抛出异常。同样,遵循TDD的原则,你将在写任何被测试类的实现前首先创建测试用例,所以不要编译。
为退休这一需求添加测试用例
EmployeeTest然后点击
void testRetire()
{
;
// Call the retire method,first time should be successful.
employee.retire();
// Expect an exception to be thrown because the employee is
// already retired.
this.parmExceptionExpected(true,"Already retired");
employee.retire();
}
在你为Employee类添加retire方法前,不要编译测试用例。你必须为Employee类添加一个变量才存储职员是否已退休。为了简化这个例子,你将抛出一个静态字符串的错误信息,在实际使用时,你应该创建一个label而不是使用静态文本‘Already retired’。
添加retire方法
classDeclaration方法上双击。
2. 在代码编辑器中,为ClassDeclaration方法添加如下成员变量。
boolean retired;
4. 在代码编辑器中,按如下代码修改该方法。
public void retire()
{
// If retired,throw an exception,otherwise set the retired value to true.
if (retired)
throw error("Already retired");
retired = true;
}
Employee类点击6. 右键单击EmployeeTest类,点击7. 在单元测试工具栏上,点击
由于添加了两个测试用例,所以运行结果显示‘2 run,0 Failed’。你可以通过不第二次调用testRetire方法来是第二个测试用例运行失败。按如下代码修改: |
void testRetire()
{
;
// Call the retire method,first time should be successful.
employee.retire();
// Expect an exception to thrown because the employee is already retired.
this.parmExceptionExpected(true,"Already retired");
// employee.retire();
}
捕捉代码覆盖率