Scalaのtestでpytestのparametrize風実装
Scalaのtestでpytestのparametrize風実装メモ
pytestのparametrize
parametrizeを使用してパラメータ化されたテストを行うサンプルコード
# テスト対象のコード(例:calculator.py)
def add(x, y):
return x + y
# テストコード(例:test_calculator.py)
import pytest
from calculator import add
# @pytest.mark.parametrizeを使用してパラメータ化されたテストを行う
@pytest.mark.parametrize("input_a, input_b, expected", [
(1, 2, 3), # テストケース1
(5, 5, 10), # テストケース2
(0, 0, 0), # テストケース3
(-1, 1, 0), # テストケース4
(-5, -5, -10), # テストケース5
])
def test_addition(input_a, input_b, expected):
result = add(input_a, input_b)
assert result == expected
scalaで同じこと
import org.scalatest.funspec.AnyFunSpec
// テスト対象のコード(例:Calculator.scala)
class Calculator {
def add(x: Int, y: Int): Int = x + y
}
// テストコード(例:CalculatorTest.scala)
import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.prop.TableDrivenPropertyChecks
class CalculatorTest extends AnyFunSuite with TableDrivenPropertyChecks {
val calculator = new Calculator
val testCases = Table(
("inputA", "inputB", "expected"),
(1, 2, 3), // テストケース1
(5, 5, 10), // テストケース2
(0, 0, 0), // テストケース3
(-1, 1, 0), // テストケース4
(-5, -5, -10) // テストケース5
)
test("should add two numbers") {
forAll(testCases) { (inputA, inputB, expected) =>
val result = calculator.add(inputA, inputB)
assert(result == expected)
}
}
}
感想
なんでScala使うんだっけ...?
以上。