试图了解函数式程序员如何在没有依赖项注入的情况下对具有依赖项的函数进行单元测试。为了使用模拟进行单元测试,您可以通过方法签名或通过类似构造函数/构造函数的机制来提供依赖项。
因此,如果您具有如下功能组合:
a -> b -> c -> d
如果您在d
谈论某种依赖性,如何a
进行单元测试?无论依赖关系保存在哪里,我都希望对其进行单元测试。我想知道函数式程序员采用什么方法。
您可以通过适当的单元测试代码depenent作用域,嘲弄和依赖注入。让我告诉你我的意思。
const square = x => x ** 2
const isOdd = x => x % 2 === 1
const addDependentValue = dependency => x => x + dependency.value
const mockDependency = { value: 5 }
it('filters out evens, squares, and adds value from dependency', () => {
const output = pipe([
filter(isOdd),
map(square),
map(addDependentValue(mockDependency)),
])([1, 2, 3, 4, 5])
assert.deepEqual(output, [6, 14, 30]) // OK
})
我们确定了函数的作用域,addDependentValue
以便返回值可以“看到”依赖关系(它在作用域内)。在测试中,我们使用嘲笑了我们的依赖关系mockDependency
。这将使我们能够在测试中得出可预测的结果。在一个不太人为的示例中,您的模拟应镜像您要模拟的任何依赖项的接口。最后,我们注入了mockDependency
在我们的测试,使我们能够合理地测试这个管道。
如何对单元进行测试?
a
是纯的,所以您可以为此编写一个简单的单元测试
// if a is square
it('squares', () => {
assert.strictEqual(square(3), 9) // OK
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句