Почему мой код Python не проходит модульное тестирование?

#python #unit-testing

#python #модульное тестирование

Вопрос:

У меня есть эта проблема:

Создайте функцию с именем binary_converter . Внутри функции реализуйте алгоритм для преобразования десятичных чисел от 0 до 255 в их двоичные эквиваленты.

Для любого недопустимого ввода верните строку Недопустимый ввод

Пример: для числа 5 возвращаемая строка 101

Код модульного тестирования приведен ниже

 import unittest


class BinaryConverterTestCases(unittest.TestCase):
  def test_conversion_one(self):
    result = binary_converter(0)
    self.assertEqual(result, '0', msg='Invalid conversion')

  def test_conversion_two(self):
    result = binary_converter(62)
    self.assertEqual(result, '111110', msg='Invalid conversion')

  def test_no_negative_numbers(self):
    result = binary_converter(-1)
    self.assertEqual(result, 'Invalid input', msg='Input below 0 not allowed')

  def test_no_numbers_above_255(self):
    result = binary_converter(300)
    self.assertEqual(result, 'Invalid input', msg='Input above 255 not allowed')
  

мой код приведен ниже

 def binary_converter(n):
   
    if(n==0):
        return "0"
    
    elif(n>255):
        
        return "invalid input"
    elif(n < 0):
        return "invalid input"
    else:
        ans=""
        while(n>0):
            temp=n%2
            ans=str(temp) ans
            n=n/2
        return ans
  

Результаты модульного тестирования

 Total Specs: 4 Total Failures: 2

1. test_no_negative_numbers

    `Failure in line 19, in test_no_negative_numbers self.assertEqual(result, 'Invalid input', msg='Input below 0 not allowed') AssertionError: Input below 0 not allowed`

2. test_no_numbers_above_255

    `Failure in line 23, in test_no_numbers_above_255 self.assertEqual(result, 'Invalid input', msg='Input above 255 not allowed') AssertionError: Input above 255 not allowed`
  

Комментарии:

1. «Недопустимый» ! = «недопустимый» ?

2. Не беспокойтесь — вы можете вечно смотреть на подобные вещи, не видя проблемы.

Ответ №1:

Сравнение строк в случаях Python заботится.

 >>> 'invalid input' == 'Invalid input'
False
  

Вам нужно настроить тестовый код или код реализации так, чтобы строковые литералы точно совпадали.

 def test_no_negative_numbers(self):
    result = binary_converter(-1)
    self.assertEqual(result, 'Invalid input', msg='Input below 0 not allowed')
                              ^--- (UPPERCASE)

...

elif(n < 0):
    return "invalid input"
            ^--- (lowercase)