【问题标题】:Writing unit test for persistent data creation and deletion为持久数据创建和删除编写单元测试
【发布时间】:2009-06-17 07:33:55
【问题描述】:

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

[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() 方法执行保存但返回 false/failure 时。断言触发并且删除没有被调用,因此它不会自行清理。

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

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

【问题讨论】:

    标签: c# database unit-testing


    【解决方案1】:

    将删除放在标有TestCleanup 属性的方法中(我假设您使用的是MSTest)。

    顺便说一句,您的测试还测试了两个不同的东西:保存是否有效,它还测试删除。测试一次只能测试一件事。

    【讨论】:

    • 谢谢,我想我是在让“测试”自行清理而不是确保“测试固定”是干净的。观察到我正在测试两种不同的东西是一个真正的 d'oh 时刻。
    【解决方案2】:

    将两者都包装在一个事务中?在 catch 中删除?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多