Запуск unit-тестов в песочнице и локально на Python и unittest

Запуск unit-тестов в песочнице и локально на Python и unittest

Цель примера. Допустим вы решаете задачи на ресурсах:

www.codewars.com
www.codesignal.com

На данных ресурсах ко всем задачам даются unit-тесты. Вы хотите решать задачу локально, перенести unit-тесты с данных ресурсов в песочницы и на компьютер, редактировать и добавлять свои тесты, постить ссылки на свои примеры на форуме, отправлять ссылки друзьям. Берите исходники примера с GitHub, который тестирует сложение двух чисел. Команды запуска даны в описании: https://github.com/8Observer8/sum-of-numbers-unittest-python

Вы хотите продемонстрировать решение со своими unit-тестами, чтобы человек мог очень быстро, в два клика: открыть и запустить unit-тесты. Он может сделать Fork, изменить тесты (или код), добавить новые тесты, которые бы показывали вашу ошибку, либо отсутствие функциональности. Вы можете воспользоваться песочницами.

Пример в песочницах:

Класс “Kata” содержит метод Add, который складывает два числа. В файле “test_Kata.py” описан один unit-тест:

Kata.py



class Kata():

    @staticmethod
    def Add(a, b):
        return a + b

test_Kata.py


import unittest
from Kata import Kata


class KataTest(unittest.TestCase):

    def test_add(self):
        # Arrange
        inputA = 5
        inputB = 6
        expected = 11

        # Act
        actual = Kata.Add(inputA, inputB)

        # Assert
        self.assertEqual(expected, actual)

На кодварс же вроде своя библиотека https://github.com/Codewars/python-test-framework

Не знал. И что можно сделать с этим?

Ну если ее взять, то наверно меньше изменений кода тестов понадобится, просто скопировть и всё.

Основной смысл примера, что unit-тесты в песочницы можно перенести, а на всех песочницах есть unittest. На codesignal тоже свои тесты. Кому-то может больше нравится PyTest. Лично я пока решил остановиться на unittest. Всем не угодишь. Но unittest есть в Python по умолчанию, поэтому это более общее решение, а самое главное это есть во всех онлайн песочницах.

Отмечу, если кому интересно, что мои личные цели применения Python очень ограничены:

  • Написание плагинов для Blender для автоматизации 3D моделирования механизмов, конструкций и игровых объектов для моих будущих игр с мультиплееров (клинет: WebGL/GLSL, TypeScript; сервер: Node.js, Express, socket.io, TypeScript. Использую этот плагин для VSCode для отладки и выполнения по шагам, о котором я узнал из видео туториала: Blender 2.8 Addon Development Tutorial for Beginners

  • Написание плагинов для GIMP для автоматизации создания или обработки 2D изображений. Начинал с туториала: Как написать дополнение для GIMP на языке Python

  • Изучение написания unit-тестов, тренировка через решение задач с unit-тестами на ресурсах типа: codewars, codesignal. Изучения написания мок объектов для инжектирования зависимостей, таких как: временно нереализованные классы и внешние API (Blender API и GIMP API). В целом, навыки, которые можно перенести на TypeScript

Я пока что решил остановиться на двух языках: TypeScript и Python. Буду тренироваться делать, для начала, простые сетевые игры (крестики-нолики, карточные, морской бой и т.д.) с развёртыванием на бесплатном хостинге Heroku, который может развёртывать автоматически после push’а на GitHub. Сейчас на GitHub можно бесплатно создавать приватные репозитории. Ну чё, народ, погнали!