Очень новичок в модульном тестировании, поэтому это может быть что-то очень простое, но я не уверен, как имитировать аргумент self в функциях.

Функция, которую я хочу протестировать:

class dataFeed:
    def generateURL(self, ticker, days, period):
        return "https://www.google.com/finance/getprices?i=" + str(period) + "&p=" + str(days) + "d&f=d,o,h,l,c,v&df=cpct&q=" + ticker

Тестовый класс:

import unittest
from dataFeed import dataFeed as df

class TestCases(unittest.TestCase):
    def test(self):
        self.assertEqual(df.generateURL("AAPL", 2, 5), "https://www.google.com/finance/getprices?i=5&p=2d&f=d,o,h,l,c,v&df=cpct&q=AAPL")

if __name__ == '__main__':
    unittest.main()

Вывод, который я получаю, таков:

ERROR: test (__main__.TestCases)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\ian\Documents\Capstone\Components\testing.py", line 9, in test
    self.assertEqual(df.generateURL("AAPL", 2, 5), "https://www.google.com/finance/getprices?i=5&p=2d&f=d,o,h,l,c,v&df=cpct&q=AAPL")
TypeError: unbound method generateURL() must be called with dataFeed instance as first argument (got str instance instead)
9
user2327814 29 Апр 2014 в 19:56

2 ответа

Лучший ответ

Вы захотите создать экземпляр объекта dataFeed и использовать его для тестирования.

Бывший.

class TestCases(unittest.TestCase):
    def test(self):
        data_feed = dataFeed()
        self.assertEqual(data_feed.generateURL("AAPL", 2, 5), "https://www.google.com/finance/getprices?i=5&p=2d&f=d,o,h,l,c,v&df=cpct&q=AAPL")
12
VirusBloom 29 Апр 2014 в 20:46

Похоже, ваш метод класса можно сделать статическим, поскольку он не использует аргумент self в своей реализации. Так что просто сделайте метод статическим, и вы можете использовать свой класс TestCase как есть.

Если ваш метод класса не является статическим, посмотрите ответ virusbloom.

1
ketan goyal 26 Июн 2018 в 21:08