忽略TearDown或清理代码中的异常是否可以

时间:2015-09-08 18:47:57

标签: c# exception-handling automation nunit ui-automation

我在自动化中运行了一个测试套件。所有这些测试都是功能性UI测试。它看起来像下面

public static List <GameObject> bullets = new List <GameObject> ();
public static List <Vector3> targets = new List <Vector3> ();
public float speed;

public override void Shot (Vector3 hitPoint) {
for (int i = 0; i < raysNumber; i++) {
    direction = new Vector3 (UnityEngine.Random.Range (-splash, splash), UnityEngine.Random.Range (-splash, splash), 100);
    direction = t_barrel.TransformDirection (direction);
    if (Physics.Raycast (t_barrel.position, direction, out cele[i], 100, layer)) {

        EnemyFPS enemyHealth = cele[i].collider.GetComponent <EnemyFPS> ();
        BulletScript bullet = Instantiate (g_kubik, t_barrel.position, t_barrel.rotation) as BulletScript;
        bullet.direction = (cele [i].point - t_barrel.position).normalized;
        bullets.Add (bullet);


    }
}

public override void MoveBullets () {
    if (bullets.Count > 150) {
        bullets.RemoveAt (0);
        targets.RemoveAt (0);
    }
    for (int i = 0; i < bullets.Count; i++) {

        bullets [i].transform.position += bullets [i].direction * speed * Time.deltaTime;
    }

}

现在,问题是[SetUp] public void Setup() { CreatePolicy(); } [Test] public void Test1() { EditPolicyAndValidateResults(); } [Test] public void Test2() { EditPolicyAndValidateResults(); } [TearDown] public void TearDown() { DeletePolicy(); } 有时会失败(对于一个或两个测试而言是随机的),并且因此相应的测试失败了。 如果已向DeletePolicy()添加了try catch块,则可以避免失败,如下所示:

DeletePolicy()

由于测试[TearDown] public void TearDown() { try { DeletePolicy(); } catch(Exception ex) { // Do nothing } } 函数不是我的测试用例的意图,所以这种方法对我来说很好。这是正确的还是我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:1)

Unit Testing的一般模式是:ArrangeAct然后是AssertAAA

Setup只是以更好的方式Arrange测试的指定方法(例如,通过重新设置任何先前模拟/存根的对象来节省时间并避免代码重复)。它绝不是强制性的,只是帮助测试编码器更好地编码的一种方法。

TearDown再次以同样的方式成为帮助者,它比AAA的通用概念更远,而不是Setup。这是因为在AAA中没有提到任何关于破坏或清理的事情。

所以,请随意忽略TearDown中的任何失败,除非它在某种程度上很重要。也许你的眼睛里隐藏着一些东西,你还没有考虑到。对故障点进行另一个单元测试可能很重要,但这完全取决于你的情况。