За последние несколько лет я занимался кодированием на разных языках. В большинстве случаев (кроме POC) мне приходилось писать тестовые примеры для себя. Иногда мне приходилось писать тестовые примеры и для другого кода [Я очень его ненавижу].

При настройке тестовой среды возникает множество проблем. Здесь я объясню, как настроить базовую тестовую среду для модульного тестирования для известных языков программирования.

NodeJs / JavaScript: сегодня наиболее часто используемым языком является JavaScript. Благодаря экосистеме node js и ее простоте у нас есть множество фреймворков / инструментов для создания строительных лесов. Легко настроить любую среду.

Для создания полноценного рабочего сетапа можно использовать генераторы типа Yeoman. Некоторые другие фреймворки, такие как React, Angular, предоставляют настройку тестовой среды сгенерированным кодом. Для React чаще всего используется генератор create-react-app. Вы получаете всю настройку по умолчанию.

Однако для базовой настройки вы можете выполнить следующие шаги.

Предпосылка:

  1. Nodejs
  2. Npm / npx

Шаги:

  1. Создайте структуру папок, как показано ниже:
  2. Создайте util.js и добавьте функцию в директорию src
  3. Создайте тестовый файл в тестовой папке [Имя должно содержать .test.js]
  4. Инициируйте npm package и установите jest среду тестирования

Структура папки:

$ mkdir src test
//util.js
exports.add = (a, b) => a+b
$ npm init --y 
## install jest testing framework 
$ npm i --save-dev jest 

Добавьте базовые тесты и повторите попытку:

//util.test.js
const {add} = require("../")describe("Util.js", () => {    it("should able to add", () =>{ 
  expect(add(1,1)).toBe(2)    
 })    
it("should fail to add", () =>{        
  expect(add(1,1)).toBe(3)    
 })
})

Запустите тестовый пример:

Вывод:

$ npx jest

Подробнее: https://github.com/deepakshrma/unit-test--setup-in-all-languages/tree/master/javascript

Java: вторым по популярности языком является Java. Благодаря такому инструменту, как Gradle, установка стала такой простой. Всякий раз, когда я думаю о своих былых временах, меня все еще мучает мурашка от боли.

Предпосылка:

  1. "Ява"
  2. Gradle [v5.5.1 и выше]

Шаги:

  1. Создайте папку, выполните команду ниже и следуйте инструкциям.

После запуска gradle init выберите соответствующие параметры:

3. library -> 3. java -> 1. Groovy -> 1 Junit 4 <-| Enter <-| Enter

## Create lib using gradle
$ md java_code
$ gradle init
##  --> 3: library 
    --> 3: Java 
    --> 1: Groovy
    --> 1: JUnit 4
    --> enter <-|
    --> enter <-|

Запуск теста:

## run test case
$ ./gradlew test

Подробнее: https://github.com/deepakshrma/unit-test--setup-in-all-languages/tree/master/java_code

Python: я использовал Python в качестве языка сценариев. У меня никогда не было возможности использовать Python в качестве полнофункционального языка. Во время настройки мне было очень сложно настроить тест для простой функции. До сих пор я все еще не знаю, какой фреймворк нужно настроить. Но мне удалось запустить несколько базовых тестовых примеров.

Предпосылка:

  1. Python [3.6 и выше]
  2. Pip [19.3.1 и выше]

Шаги:

  1. Создайте папку и добавьте исходный код. добавить util.py и test_util.py
$ md project && md project/src && cd $_
$ vi util.py
// util.py
def add(a, b):
    return a+b
$ vi test_util.py
// test_util.py
import util 
def test_answer():
    assert util.add(1,1) == 2
def test_answerFail():    
    assert util.add(1,1) == 3

2. Установите модуль pytest с помощью pip

$ pip install -U pytest

3. Запустить тестовый пример

$ pytest -q src/test_util.py

Подробнее: https://github.com/deepakshrma/unit-test--setup-in-all-languages/tree/master/python

Rust: Недавно начал программировать на Rust. Это мощный язык и в то же время очень простой. В отличие от java, C, C ++ Вам не нужно много церемоний. Мне это очень нравится. Карго упрощает все.

Предпосылка:

  1. "Ржавчина"
  2. Карго

Шаги:

  1. Создать библиотеку с помощью Cargo
  2. Напишите тестовый код в том же файле
  3. Запустить тестовый пример
## Create lib using cargo
$ cargo new rust_lang --lib
// src/lib.rs
mod util {   
  pub fn add(a:i32, b:i32) -> i32 {       
     a+b    
  }
}
// test code in same file
#[cfg(test)]mod tests {
 use super::*;    
 #[test]
 fn it_works() {
   assert_eq!(util::add(1,1), 2);    
 }    
 #[test] 
 fn it_will_works() {
    assert_eq!(util::add(1,1), 3);
 }
}

Запустить тестовый пример:

$ cargo test -- --nocapture

Подробнее: https://github.com/deepakshrma/unit-test--setup-in-all-languages/tree/master/rust_lang

Go-lang: Go - один из наиболее часто используемых языков. Я сделал несколько POC в GoLang. Как я уже упоминал, выполняя POC, я избегаю (не пишу) тестовых примеров. Однако я попробовал. Настройка тестовой среды была для меня очень болезненной. Даже установка GOPATH сбивает с толку. Однако мне это удалось. Вот следующие шаги, которые вы можете выполнить.

Шаги:

  1. Создайте папку util / и test /
  2. Скопируйте папку, чтобы перейти к модулю пути
  3. Запустить тестовый пример
## Create folder util/ and test/
// util/lib.go
package util 
/// Test function Add
func Add(a int, b int) int { 
  return a + b
}
//test/lib_test.go
package test 
import ( 
"testing"  
util "github.com/xdeepakv/go_lang/util"
) 
func TestAddPass(t *testing.T) { 
 got := util.Add(1, 1) 
 if got != 2 {  
   t.Errorf("Add not working properly") 
  }
}
func TestAddFail(t *testing.T) { 
 got := util.Add(1, 2) 
 if got != 2 {  
   t.Errorf("Add not working properly") 
 }
}

Попытка1

cd go_lang
go test -v ./test/

Проверьте Go путь, Скопируйте папку, чтобы перейти в модуль пути

## Check go path
$ echo $GOPATH
## Default would be ~/go

## Copy folder to go path module
$ cp -R ../go_lang $GOPATH/src/github.com/xdeepakv
$ cd $GOPATH/src/github.com/xdeepakv/go_lang

Запустите тестовый пример:

$ go test -v ./test/

Подробнее: https://github.com/deepakshrma/unit-test--setup-in-all-languages/tree/master/go_lang

Обновлено: 13 ноября

Swift: быстро создать библиотеку с помощью диспетчера пакетов. Однако написать тестовый пример для меня было непростой задачей. Я никогда не использовал XCTest. Так что мне было трудно найти правильный путь. Чтобы создать библиотеку утилит, вы можете выполнить следующие шаги:

Предпосылка:

  1. Swift 5.1+

Шаги:

  1. Создайте библиотеку с помощью пакета swift
  2. Тесты / utilTests / utilTests.swift
## Create lib using swift package
$ md util && swift package init --type library
// util/util.swift
public class Util {
public class func add(_ a: Int, _ b: Int) -> Int {
    return a+b
  }
}
// Tests/utilTests/utilTests.swift
func testExample() {
 XCTAssertEqual(Util.add(1,2), 2)
}

Запустите тестовый пример:

$ swift test

Подробнее: https://github.com/deepakshrma/unit-test--setup-in-all-languages/tree/master/swift_code

Лучший пример: https://medium.com/quick-code/lets-build-a-command-line-app-in-swift-328ce274f1cc

Я все еще изучаю другие языки. Я обновлю шаги для этих языков позже. Если вашего programming language нет, дайте мне знать. Я все еще пытаюсь найти лучший способ написать unit testing. Если у вас есть предложения, дайте мне знать.

#Cheers #KeepCoding

Весь исходный код можно найти на Github: