单元测试访问文件的功能

nas*_*eeg 9 python unit-testing

我有两个函数 - 一个用于构建一组文件的路径,另一个用于读取文件.以下是两个功能:

def pass_file_name(self):
    self.log_files= []
    file_name = self.path+"\\access_"+self.appliacation+".log"
    if os.path.isfile(file_name):
        self.log_files.append(file_name)
    for i in xrange(7):
         file_name = self.path+"\\access_"+self.appliacation+".log"+"."+str(i+1)
         if os.path.isfile(file_name):
            self.log_files.append(file_name)
    return self.log_files


def read_log_files (self, log_file_names): 
    self.log_entrys = []
    self.log_line = []
    for i in log_file_names:
        self.f = open(i)
        for line in self.f:
            self.log_line = line.split(" ")
            #print self.log_line
            self.log_entrys.append(self.log_line)
    return self.log_entrys
Run Code Online (Sandbox Code Playgroud)

对这两个功能进行单元测试的最佳方法是什么?

nkr*_*rkv 8

你有两个单位:

  • 一个生成文件路径
  • 第二个读它们

因此应该有两个单元测试用例(即带测试的类).首先只测试文件路径生成.第二个是测试从您在tests目录的特殊子目录中准备的预定义文件集读取,它应该与第一个测试用例隔离测试.

在您的情况下,您可能会有非常短的日志文件进行测试.在这种情况下,为了更好的可读性和维护,最好将它们嵌入测试代码中.但在这种情况下,你必须稍微提高你的阅读功能,这样它可以采用文件名文件类对象:

from cStringIO import StringIO

# ...
def test_some_log_reading_scenario(self):
    log1 = '\n'.join([
        'log line',
        'another log line'
    ])
    log2 = '\n'.join([
        'another log another line',
        'lala blah blah'
    ])
    # ...
    result = myobj.read_log_files([StringIO(log1), StringIO(log2)])
    # assert result
Run Code Online (Sandbox Code Playgroud)