我刚开始学习单元测试(使用FlexUnit)。我仍然不知道如何使用它们。
我创建了一个新的flex项目,并创建了名为Car
的类。然后,我为Car类创建了一个TestCase类。
这是FlexBuilder给我的默认模板,我放了一些痕迹。
package flexUnitTests
{
import flexunit.framework.Assert;
public class CarTest
{
[Before]
public function setUp():void
{
trace('before test function');
}
[After]
public function tearDown():void
{
trace('after test function');
}
[BeforeClass]
public static function setUpBeforeClass():void
{
trace('before test class');
}
[AfterClass]
public static function tearDownAfterClass():void
{
trace('after test class');
}
[Test]
public function testCar():void
{
trace('the test function');
var c:Car = new Car("gol");
Assert.assertTrue("Is car name valid:", c.name != "gol");
}
}
}
我不明白为什么在测试函数之前或之后要运行这么多方法。为什么不在一个简单的函数中使用它们呢,比如:
[Test]
public function testCar():void
{
trace('before test class');
trace('before test function');
trace('the test function');
var c:Car = new Car("gol");
Assert.assertTrue("Is car name valid:", c.name != "gol");
trace('after test function');
trace('after test class');
}
我想补充的第二个问题是,这些测试单独测试每个类(如安装Car
类时所示),或者我可以通过安装主类来测试我的整个应用程序一次?问题是如何模拟应用程序的整个用户流(用户单击此处,向那里的服务器发送请求等)。我应该在测试方法中一个接一个地写一个完整的流程吗?:O
我不明白为什么在测试函数之前或之后要运行这么多方法。
您不需要来实现所有这些方法。FB为您生成了所有这些存根,但您也可以忽略它们。
也就是说,在一个测试类中可以有多个测试函数。您通常测试类的每个公共函数。您甚至可以使用不同的角大小写参数集对每个函数进行多个测试
例如,在你的例子中,你只测试构造函数,但你可能有一个测试:
car.turnLeft(32)
(以度为单位)- 或者看看
car.turnLeft(0)
- 或
car.turnLeft(190)
(此处为car.turnRight
地形) - 或
car.turnLeft(-12)
(负向左转?)
before/after方法可以用来编写一些代码,您希望在类中的每个测试之前/之后执行这些代码,这样您就不必在每个测试函数中重复执行这些代码。
这些测试单独测试每个类别的
这是一个单元测试,不是吗?
我可以通过初始化主类来测试我的整个应用程序吗?
这不是单元测试的目的:它们只测试类。还有其他类型的测试工具来测试(部分)应用程序:
- 行为测试工具:在其中编写包含典型执行序列的场景,并断言这些序列的结果是正确的。我相信Cucumber可以用这种方式测试Flex应用程序(但不完全确定)
- UI测试工具:您可以在其中记录用户在应用程序中点击的场景。然后可以回放这些场景,以测试应用程序是否按预期运行。FlexMonkey是Flex应用程序的一个这样的解决方案,但所有者似乎已经改变了产品的方向