我编写和测试 Solidity 代码已经有一段时间了,而且我发现自己相当广泛地使用
smock2
库。简而言之,确保在 ContractA
测试期间,测试 ContractA
调用 ContractB
,而不是测试 ContractB
调用的实际副作用。它可以很好地分离关注点并减少代码重复。
但是,在使用 EIP-2535(又名钻石模式)时,我很难弄清楚如何避免从
FacetB
测试 FacetA
,例如,当 FacetA
的方法调用 FacetB(address(this)).doSomething()
时。
是否有一种可接受的方式来模拟方面?或者,是否有一种惯用的方法来单独测试各个方面,即使它们相互依赖?理想情况下,无需将
FacetB
复制到仅用于测试的 Solidity 模拟中......
hardhat
(与 ethers
一起)和 hardhat-deploy
,不幸的是后者的文档很少。
使用 hardhat-deploy
的固定装置以及 smock
的任何东西都会获得额外积分。
我面临着同样的问题rn:(你有什么建议吗?