[PYTHON] Ich habe einen Unit-Test für verschiedene Sprachen geschrieben

Repository

Die unten vorgestellten sind auf [Github] verfügbar (https://github.com/syuchan1005/UnitTestExamples).

Einführung

Ich beschloss, verschiedene Sprachen auszuprobieren und einen einfachen Unit-Test als Testversion zu schreiben. Ich werde nicht im Detail erklären, daher beziehen Sie sich bitte auf das externe Dokument.

Da ~~~~ mit jeder IDE einfach ausgeführt werden kann, ist es nicht erforderlich, sie in der Befehlszeile auszuführen, und es wird nicht beschrieben. Es ist nur ein Mangel an Wissen ~~

Es läuft alles auf Windown 10 Pro Insider Preview Build 17025.

Python

Ausführungsumgebung

Python 3.6.1

Überblick

In Python ist das "unittest" -Paket standardmäßig verfügbar. Verwenden Sie es daher.

Datei

Python/
 ├ src/
 │ └ sample.py
 ├ test/
 │ └ sample_test.py
 └ setup.py

sample.py

sample.py


class Calc:
    def add(self, x, y):
        return x + y

    def pow(self, x, y):
        return x ** y

sample_test.py

sample_test.py


import sys
import unittest

from sample import Calc


class TestSample(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.calc = Calc()

    def test_add(self):
        self.assertEqual(15, self.calc.add(10, 5))
        self.assertEqual(5, self.calc.add(8, -3))

    def test_pow(self):
        self.assertEqual(125, self.calc.pow(5, 3))
        self.assertEqual(sys.maxsize, self.calc.pow(2, 31) - 1)

setup.py

setup.py


from setuptools import setup, find_packages
import sys
import unittest

#Pip Installation auch während der Entwicklung-e .Sie können von jeder Datei aus auf das Beispielmodul verweisen, indem Sie dies tun
#In diesem Fall ist das folgende System.path.Anhängen wird nicht mehr benötigt.
sys.path.append('./src')


def my_test_suite():
    """Unter dem Testverzeichnis*_test.Erkennen Sie py als Testmodul"""
    test_loader = unittest.TestLoader()
    test_suite = test_loader.discover('test', pattern='*_test.py')
    return test_suite


setup(
    name="Sample",
    version="1.0",
    #Wenn src die Wurzel ist und beispielsweise pip entspricht, setzen Sie Folgendes
    package_dir={'': 'src'},
    packages=find_packages('src'),

    test_suite='setup.my_test_suite'
)

Ausführungsmethode

Führen Sie "python setup.py test" vom Terminal aus.

Beispiel für das Testen mit doctest

sample.py


"""doktestes Beispiel

Wenn Sie dieses Modul direkt ausführen, wird doctest gestartet.
Wenn ein Test fehlgeschlagen ist

File "sample.py", line 11, in __main__
Failed example:
    calc.pow(5, 3)
Expected:
    126
Got:
    125
**********************************************************************
1 items had failures:
   1 of   4 in __main__
***Test Failed*** 1 failures.
Wird angezeigt.

>>> calc = Calc()
>>> calc.add(10, 5)
15
>>> calc.add(8, -3)
5
>>> calc.pow(5, 3)
126

"""

class Calc:
    def add(self, x, y):
        return x + y

    def pow(self, x, y):
        return x ** y


if __name__ == "__main__":
    import doctest
    doctest.testmod()


Java

Ausführungsumgebung

Java 9 JUnit 5

Überblick

Java verfügt über verschiedene eigenständige Bibliotheken, verwendet jedoch die berühmte JUnit.

Datei

Java/
 ├ src/
 │ └ Calc.java
 └ test/
    └ CalcTest.java

Calc.java

Calc.java


public class Calc {
	public int add(int x, int y) {
		return x + y;
	}

	public double pow(int x, int y) {
		return Math.pow(x, y);
	}
}

CalcTest.java

CalcTest.java


import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class CalcTest {
	private Calc calc = new Calc();

	@Test
	void add() {
		assertEquals(15, calc.add(10, 5));
		assertEquals(5, calc.add(8, -3));
	}

	@Test
	void pow() {
		assertEquals(125, calc.pow(5, 3));
		assertEquals(Integer.MAX_VALUE, calc.pow(2, 31) - 1);
	}

}

Ausführungsmethode

Da JUnit mit jeder IDE einfach ausgeführt werden kann, ist es nicht erforderlich, es in der Befehlszeile auszuführen, und es wird nicht beschrieben.

JavaScript(Node.js)

Ausführungsumgebung

NodeJS v8.6.0 npm v5.3.0

Überblick

Es gibt verschiedene Bibliotheken, aber dieses Mal werden wir Mokka verwenden. Wir haben babel-cli und babel-preset-env verwendet, um die Klassensyntax zu handhaben.

Datei

NodeJS/
 ├ src/
 │ └ Calc.js
 ├ test/
 │ └ calc.spec.js
 └ package.json

Calc.js

Calc.js


class Calc {
	add(x, y) {
		return x + y;
	}

	pow(x, y) {
		return Math.pow(x, y);
	}
}

export default Calc

calc.spec.js

js:calc.spec.js


import Calc from '../src/Calc';

const assert = require('assert');

describe('Calc', () => {
	const calc = new Calc();

	describe('add()', () => {
		assert.equal(15, calc.add(10, 5));
		assert.equal(5, calc.add(8, -3));
	});

	describe('pow', () => {
		assert.equal(125, calc.pow(5, 3));
		assert.equal(0x7FFFFFFF, calc.pow(2, 31) - 1);
	});
});

package.json

package.json


//Unterlassung
 "scripts": {
    "test": "mocha --compilers js:babel-register --recursive $(find test -name '*.spec.js')"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.6.1",
    "mocha": "^4.0.1"
  },
  "babel": {
    "presets": [
      "env"
    ]
  }

Ausführungsmethode

Führen Sie npm test im NodeJS-Ordner aus.

PHP

Ausführungsumgebung

PHP 7.1.0

Überblick

Es gibt verschiedene Bibliotheken, aber dieses Mal werden wir PHPUnit verwenden.

Datei

PHP/
 ├ src/
 │ ├ autoload.php
 │ └ Calc.php
 ├ tests/
 │ └ CalcTest.php
 ├ composer.json
 └ phpunit.xml

autoload.php

autoload.php


<?php
require_once "Calc.php";

Calc.php

Calc.php


<?php
namespace Sample;

class Calc
{
    public function add($x, $y)
    {
        return $x + $y;
    }

    public function pow($x, $y)
    {
        return $x ** $y;
    }
}

CalcTest.php

CalcTest.php


<?php
namespace Sample;

use PHPUnit\Framework\TestCase;

class CalcTest extends TestCase
{
    public $calc;

    function __construct($name = null, array $data = [], $dataName = '')
    {
        parent::__construct($name, $data, $dataName);
        $this->calc = new Calc();
    }

    public function testAdd()
    {
        $this->assertEquals(15, $this->calc->add(10, 5));
        $this->assertEquals(5, $this->calc->add(8, -3));
    }

    public function testPow()
    {
        $this->assertEquals(125, $this->calc->pow(5, 3));
        $this->assertEquals(0x7FFFFFFF, $this->calc->pow(2, 31) - 1);
    }
}

composer.json

composer.json


{
  //Unterlassung
  "require": {
    "phpunit/phpunit": "6.4.4"
  }
}

phpunit.php

phpunit.php


<phpunit bootstrap="src/autoload.php">
    <testsuites>
        <testsuite name="calc">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

Ausführungsmethode

Da PHPUnit mit jeder IDE einfach ausgeführt werden kann, ist es nicht erforderlich, es in der Befehlszeile auszuführen, und es wird nicht beschrieben.

Go

Ausführungsumgebung

Go 1.9.2

Überblick

Go hat standardmäßig ein Testpaket, verwenden Sie es also. ~~ Zuerst dachte ich, dass es kein System zur Behauptung gibt, aber ich war aus einem guten Grund überzeugt ~~

Datei

Go/
 └ src/
   └ sample/
     ├ calc.go
     └ calc_test.go

calc.go

calc.go


package sample

import (
	"math"
)

type Calc struct {}

func (calc *Calc) Add(x, y int) int {
	return x + y
}

func (calc *Calc) Pow(x, y float64) float64 {
	return math.Pow(x, y)
}

calc_test.go

calc_test.go


package sample_test

import (
	"testing"
	c "."
)

var calc = c.Calc{}

func TestCalc_Add(t *testing.T) {
	if calc.Add(10, 5) != 15 {
		t.Error("Add Failed");
	}
	if calc.Add(8, -3) != 5 {
		t.Error("Add Failed");
	}
}

func TestCalc_Pow(t *testing.T) {
	if calc.Pow(5, 3) != 125 {
		t.Error("Pow Failed");
	}
	if calc.Pow(2, 31) - 1 != 0x7FFFFFFF {
		t.Error("Pow Failed");
	}
}

Ausführungsmethode

Im Go-Verzeichnis go test ./src/sample/calc_test.go Ausführen .

Schließlich

Ich möchte verschiedene Sprachen berühren, damit ich sie erweitern kann (Anfragen sind ebenfalls willkommen).

Recommended Posts

Ich habe einen Unit-Test für verschiedene Sprachen geschrieben
Dekorateur für Unit-Test mit Zufallszahlen
Ich habe den Code für Gibbs Sampling geschrieben
[Python] Ich habe nach verschiedenen Typen gesucht! (Tippen)
Ich möchte aus verschiedenen Sprachen eine Verbindung zu PostgreSQL herstellen
Ich habe matplotlib geschrieben
Geben Sie die Pytest-Clean-Parameter für den Test der Kolbeneinheit an
Python-Unit-Test
Ich habe ein automatisches Kitskript für OpenBlocks IoT geschrieben
So führen Sie einen Komponententest durch Teil 2 Klassendesign zum Testen
Ich habe ein automatisches Installationsskript für Arch Linux geschrieben
HMAC in verschiedenen Sprachen
Ich habe den Code für die japanische Satzgenerierung mit DeZero geschrieben
Ich habe ein Demo-Programm zur linearen Transformation einer Matrix geschrieben
Messen Sie sich mit Datei-E / A in verschiedenen Sprachen und vergleichen Sie die Geschwindigkeiten
Ich habe gerade das Originalmaterial für den Python-Beispielcode geschrieben
Ich habe N-Queen in verschiedenen Sprachen implementiert und die Geschwindigkeit gemessen