如何使用硬连线功能进行测试

thi*_*sty 1 testing haskell

我的理解是,编写代码时应该不考虑测试,并且测试需要弯曲以迎合代码。我的问题是我有一个函数f1调用data从另一个函数返回的输入数据(Haskell 类型)f2那么如何编写提供不同输入数据的测试用例呢?

当然,我可以f1为输入添加一个参数,但毕竟这是为了测试。它实际上比这更混乱,因为f1实际上是Plutus 合约,并且 arg 需要序列化为 JSON —— 所有这些都是为了测试。或者,我可以从文件中读取输入,并提供文件路径作为参数——参数已经够糟糕了,但如果不需要的话,我不想使用文件。

请注意,这f1是一个 http 端点,所有测试代码都需要通过端点。

data ActualData = ActualData String String Integer
newtype Input = Input [ActualData]

f1:: Contract () Schema Text () 
f1 = do
    let input = f2 
    ...

f2 :: Input -- to be determined in the future, currently unknown
f2 = Input
    [ ActualData "BlackRock" "pkh1" 10
    , ActualData "GreenRock" "pkh2" 20
    ]
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 6

我认为最简单的可能就是公开两个函数。一个接受输入数据作为普通的旧函数输入,另一个知道使用f2. 所以:

f1WithArg :: X -> Y
f1WithArg x = {- ... -}

f1 :: Y
f1 = f2 >>= f1WithArg -- or whatever
Run Code Online (Sandbox Code Playgroud)

然后,您将根据 编写所有测试f1WithArg,并相信它f1不会进行任何有趣的计算。

或者,您可以公开一个f1采用Maybe X, 并具有类似实现模式的单个:

f1Auto :: Maybe X -> Y
f1Auto Nothing = f2 >>= f1Auto . Just -- or whatever
f1Auto (Just x) = {- ... -}
Run Code Online (Sandbox Code Playgroud)

如果您需要以编程方式决定输入是否应来自,类似的某些接口可能会很有用f2,但听起来似乎不适合您。