在testNG中测试db update的最佳方法是什么?

时间:2016-05-06 10:01:55

标签: testng

我正在尝试编写一个TestNG来测试属性的db更新。伪代码如下所示。

@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
}

我使用正确的方法来测试db更新吗? 还是testNG还有其他任何解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

看起来有点不善于断言。

   Assert.assertEquals(actual, expected);

对于assert equals,您需要提供db的实际值和您的预期值。如果两者相等,那么它将通过其他失败。

   Assert.assertEquals(updatedValue, newValue);

谢谢你, 穆拉利

答案 1 :(得分:0)

我在这个测试中看到了3个问题:

  1. 正如murali所说,你应该Assert.assertEquals(updatedValue, newValue)。这可确保您的断言错误有用。如果您执行Assert.assertEquals(updatedValue == newValue, true),那么您的消息将是" False不等于True"而不是"' Joe'不等于' Bob'"。

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

  3. 如果updateValue() 没有工作,那么您将使数据库处于脏状态。

  4. 要解决问题2和3,我建议模拟您的数据库。这需要什么:

    1. 看起来您的所有数据库方法都是静态的。这是的事情。将数据库包装在对象中,并使用对象方法命中数据库。
    2. 您的数据库对象最好在其构造函数中使用参数来定义它使用的网络。
    3. 创建一个代表网络的模拟对象(您传递给上面的构造函数)。它具有与普通网络相同的方法,但它实际上不会发送任何请求。
    4. 然后,在测试中,您可以测试dataBase.updateValue()是否在网络中发送UPDATE
    5. More info on mocking