2016-08-27 9 views
1

Я пытаюсь написать единичный тест для фрагмента кода, который включает использование pandas для чтения файла CSV с относительного пути. Структура каталога:Тест на нос Python с относительным путём файла pandas

./ 
./thing1/main.py 
./thing1/test_main.py 
./thing1/dat/file.csv 
./otherthings/... 

В main.py, у меня есть:

def doThings: 
    pandas.read_csv('dat/file.csv') 

if __name__ == '__main__': 
    doThings() 

В test_main.py, у меня есть

class TestMain: 
    def setup(self): 
     doThings() 

    def test_thing(self): 
     pass # there's other logic in here 

вещи отлично работает, если я бегу main.py, но когда я спрашиваю Anaconda «запускать тесты проекта», я получаю сообщение IOError, жалующееся, что «dat/file.csv» не существует. Это связано с тем, что это относительный путь, поскольку, когда я меняю его на /home/user/.../thing1/dat/file.csv, он работает. Есть ли способ, которым я могу сделать работу с модулем, сохраняя относительный путь?

ответ

0

У меня такая же проблема. Если вы вызываете os.path.abspath() на ваш относительный путь, вы увидите, что абсолютный путь неверен. Единственным обходным решением, которое я нашел, было изменение относительного пути к абсолютному пути к тестовому файлу с помощью __file__, а затем переход на один уровень для исключения имени файла:

testImgPath = os.path.abspath(os.path.join(__file__, '../', 'testFiles', 'imgName.jpg'))