gpt4 book ai didi

haskell - 使用 hspec 测试酸状态

转载 作者:行者123 更新时间:2023-11-28 20:38:47 25 4
gpt4 key购买 nike

我是一个 haskell 菜鸟,在使用酸状态测试函数时遇到问题。这是我的数据结构

data UserState = UserState { name :: String }
deriving (Eq, Ord, Read, Show, Data, Typeable)

这是我要测试的功能:

setName :: String -> Update UserState String                  
setName n =
do c@UserState{..} <- get
let newName = n
put $ c { name = newName }
return newName
$(makeAcidic ''UserState ['setName ])

这是我的测试:

spec :: Spec
spec = do
describe "test" $
it "test" $ do
setName "Mike" `shouldBe` UserState{ name = "Mike"}

我不知道如何为我的期望值建模。 UserState{ name = "Mike"} 不起作用

最佳答案

我不认为您可以在不查询的情况下访问数据库状态。所以你需要添加一个查询来询问你的数据库状态,例如:

getUserState :: Query UserState UserState
getUserState = ask

那么就可以编写这样的测试:

withDatabaseConnection :: (AcidState UserState -> IO ()) -> IO ()
withDatabaseConnection =
bracket (openLocalState UserState{name = "initial name"})
closeAcidState

spec :: Spec
spec = do
around withDatabaseConnection $ do
describe "test" $
it "test" $ \c -> do
_ <- update c (SetName "Mike")
userState <- query c GetUserState
userState `shouldBe` UserState{ name = "Mike"}

关于haskell - 使用 hspec 测试酸状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com