如何在 TypeScript 单元测试中参数化测试用例?
How do I parameterize test cases in TypeScript unit tests?
我通过了一个简单的单元测试:
describe("Example", () => {
it("Return digits or empty string", () => {
let actual = SmokeTest.ProblemOne("1");
assert.equal(actual, "1");
})
})
我现在想测试许多其他情况(空字符串、更复杂的输入和边缘情况)。我有 read about how to implement fixtures in TypeScript 但这对于 test-input, expected-output
值的数组来说似乎有点矫枉过正。
在 TypeScript/Mocha 中定义这样一个数组的惯用方法是什么?
您可以只创建一个可以重复使用的函数。
function assertProblemOne(input: string, expected: string): void {
let actual = SmokeTest.ProblemOne(input);
assert.equal(expected, actual);
}
describe("Example", () => {
it("Return digits or empty string", () => {
assertProblemOne("input here", "expected result here")
})
})
但是,我不确定这真的比简单好得多。
assert.equal(SmokeTest.ProblemOne("1"), "1");
唯一比调试代码更糟糕的是调试测试。因此,除非在测试之间共享大量代码,否则我建议让每个测试中运行的代码在结构上尽可能简单。
No special syntax is required... to parameterize tests [you can] generate them with a closure.
describe("Example", () => {
// define a closure that calls the method we are testing
const testProblemOne = ({arg, expected}) =>
function () {
const actual = SmokeTest.ProblemOne(arg);
assert.equal(actual, expected);
}
// invoke the closure for each test case
it("Empty returns empty", testProblemOne({arg: "", expected: ""}));
it("Single digit identity", testProblemOne({arg: "1", expected: "1"}));
// additional test cases here...
})
此技术避免使用 foreach
以提高可读性和更广泛的 IDE 集成。
我通过了一个简单的单元测试:
describe("Example", () => {
it("Return digits or empty string", () => {
let actual = SmokeTest.ProblemOne("1");
assert.equal(actual, "1");
})
})
我现在想测试许多其他情况(空字符串、更复杂的输入和边缘情况)。我有 read about how to implement fixtures in TypeScript 但这对于 test-input, expected-output
值的数组来说似乎有点矫枉过正。
在 TypeScript/Mocha 中定义这样一个数组的惯用方法是什么?
您可以只创建一个可以重复使用的函数。
function assertProblemOne(input: string, expected: string): void {
let actual = SmokeTest.ProblemOne(input);
assert.equal(expected, actual);
}
describe("Example", () => {
it("Return digits or empty string", () => {
assertProblemOne("input here", "expected result here")
})
})
但是,我不确定这真的比简单好得多。
assert.equal(SmokeTest.ProblemOne("1"), "1");
唯一比调试代码更糟糕的是调试测试。因此,除非在测试之间共享大量代码,否则我建议让每个测试中运行的代码在结构上尽可能简单。
No special syntax is required... to parameterize tests [you can] generate them with a closure.
describe("Example", () => {
// define a closure that calls the method we are testing
const testProblemOne = ({arg, expected}) =>
function () {
const actual = SmokeTest.ProblemOne(arg);
assert.equal(actual, expected);
}
// invoke the closure for each test case
it("Empty returns empty", testProblemOne({arg: "", expected: ""}));
it("Single digit identity", testProblemOne({arg: "1", expected: "1"}));
// additional test cases here...
})
此技术避免使用 foreach
以提高可读性和更广泛的 IDE 集成。