【问题标题】:What is the best method to test db update in testNG?在 testNG 中测试数据库更新的最佳方法是什么?
【发布时间】:2016-09-01 08:38:02
【问题描述】:

我正在尝试编写一个 TestNG 来测试属性的数据库更新。伪代码如下。

@Parameters({"newValue"})
@Test
public void testUpdateValue(@Optional String newValue)
{
    String originalValue = getValueFromDataBase(); //get Original value
    updateValue(newValue);   //update property to newValue
    String updatedValue = getValueFromDataBase();    //get updated value from db
    Assert.assertEquals(updatedValue == newValue, true);   //test value updated correctly.
    updateValue(originalValue);     // reset to origal value after test
}

我是否使用正确的方法来测试数据库更新? 或者 testNG 中还有其他解决方案吗?

提前致谢。

【问题讨论】:

    标签: testng


    【解决方案1】:

    看起来有些东西不擅长断言。

       Assert.assertEquals(actual, expected);
    

    对于断言等于,您需要提供来自 db 的实际值和您的预期值。如果两者相等则通过,否则失败。

       Assert.assertEquals(updatedValue, newValue);
    

    谢谢你, 壁画

    【讨论】:

      【解决方案2】:

      我发现这个测试有 3 个问题:

      1. 正如murali 所说,您应该使用Assert.assertEquals(updatedValue, newValue)。这可以确保您的断言错误是有用的。如果您使用Assert.assertEquals(updatedValue == newValue, true),那么您的消息将是“False is not equal to True”,而不是“'Joe' is not equal to 'Bob'”。

      2. 您的测试取决于getValueFromDatabase() 是否正常工作。如果getValueFromDatabase() 每次都返回一个随机值,或者相​​同的值,或者附加一些东西,那么即使updateValue() 有效,这个测试也会失败。

      3. 如果updateValue() 不起作用,那么您的数据库将处于脏状态。

      为了解决问题 2 和 3,我建议模拟您的数据库。这意味着什么:

      1. 看起来您的所有数据库方法都是静态的。这是一件坏事。将您的数据库包装在一个对象中,并使用对象方法访问您的数据库。
      2. 理想情况下,您的数据库对象将在其构造函数中采用参数来定义它使用的网络。
      3. 创建一个表示网络的 mock 对象(您传递给上面的构造函数)。它具有与普通网络相同的方法,但实际上不会发送任何请求。
      4. 然后,在您的测试中,您可以测试dataBase.updateValue() 是否通过网络发送UPDATE

      Moreinfoonmocking

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        相关资源
        最近更新 更多