编写自定义的fail()方法扩展Python单元测试

时间:2018-12-07 10:40:25

标签: python python-3.x unit-testing python-unittest

我对Python unittest.TestCase类进行了自定义专门化,该类包括自动日志记录并提供了可用于大量自定义测试场景的自定义业务验证方法。

我需要Python的unittest.TestCase.fail(...)的自定义版本,该版本可以与记录器使用相同的消息字符串,而不是格式化程序。

我想避免这样定义消息字符串的两个版本:

def verifySomething(self, p_one:str, p_two:str):

    if self.someClass.some_command():
        self.test_result = TestResult.PASSED
        message = "my custom message : %s and %s - %s"
        self.logger.info(message, p_one, p_two, self.test_result)
    else:
        self.test_result = TestResult.FAILED
        message = "my custom message : {} and {} - {}".format(p_one, p_two, self.test_result)
        self.fail(message)

...而是执行类似的操作

def verifySomething(self, p_one:str, p_two:str):
    message = "my custom message : %s and %s - %s"

    if self.someClass.some_command():
        self.test_result = TestResult.PASSED
        message = "my custom message : %s and %s - %s"
        self.logger.info(message, p_one, p_two, self.test_result)
    else:
        self.test_result = TestResult.FAILED
        self.fail(message, p_one, p_two, self.test_result)

注意:这是一个简化的示例,为简洁起见,我省略了“前提条件”。

摘要:如何编写一个覆盖Python的unittest.TestCase.fail(...)的自定义失败函数来做到这一点?

1 个答案:

答案 0 :(得分:1)

我只是预先格式化消息:

class ReusableMethods{

public void setWindowSize(WebDriver driver,int x, int y){
  Dimension d = new Dimension(x,y);
  driver.manage().window().setSize(d);
}
public void sameCodeMethod(){
  "samecode here"
}
public boolean windowSizeAssertion(WebDriver driver, int x,int y){
  int height = dirver.manage().window().getHight();
  int width = dirver.manage().window().getWidth();
  if((height==x)&&(width==y)){
     return true;
  }
  else{
     return false;
  }

}
}

class TestNGTest extends ReusableMethods{
@Test(priority = 0)
public void pc {
  driver.manage().window().maximize();
  samecodeMethod();
}

    @Test(priority = 1)
    public void smartphone {
      setWindowSize(driver,100,200);
      samecodeMethod();
      Asset.assertTrue(windowSizeAssertion(driver,100,200));
    }

    }

不要求您利用def verifySomething(self, p_one:str, p_two:str): if self.someClass.some_command(): self.test_result = TestResult.PASSED display_func = self.logger.info else: self.test_result = TestResult.FAILED display_func = self.fail message = "my custom message: {} and {} - {}".format(p_one, p_two, self.test_result) display_func(message) 的能力为您编写最终字符串。