代码之家  ›  专栏  ›  技术社区  ›  Adrian

编写持久数据创建和删除的单元测试

  •  3
  • Adrian  · 技术社区  · 15 年前

    在为持久存储的数据编写测试时,我提出了以下测试:

    [TestMethod]
    public void DoCreateDeleteTest() {
        PersistentDataStore pds = new PersistentDataStore();
        bool createSuccess = pds.Save("id", "payload");
        Assert.AreEqual(true, createSuccess);
        bool deleteSuccess = pds.Delete("id");
        Assert.AreEqual(true, deleteSuccess);
    }
    

    只要一切正常,这似乎很好。该函数没有以前的依赖项,它会在自身之后进行清理。问题是:当.Save()方法执行Save但返回false/failure时。该断言触发,并且不会调用delete,因此它不会自行清理。

    在此之后,数据库中会有名为“id”的持久化数据,并且以后的所有保存都会失败。

    我能想到的唯一解决办法是在保存之前进行预防性删除,但这似乎是一种大规模黑客攻击的方式。

    2 回复  |  直到 15 年前
        1
  •  5
  •   Gerrie Schenck    15 年前

    TestCleanup 属性(我假设您使用的是MSTest)。

    顺便说一下,您的测试还测试了两个不同的东西:save是否有效,以及delete是否有效。测试一次只能测试一件事情。

        2
  •  0
  •   dove    15 年前

    在一个事务中包装两者?在catch中执行删除操作吗?