我试图使用“松露测试”测试此合同,但它显示了以下错误:"TypeError:成员“所有者”未找到“,或在”owner = gaming.owner();“中的依赖于参数的查找后不可见。
Gaming.sol
pragma solidity ^0.5.0;
contract Gaming {
/* Our Online gaming contract */
address owner;
bool public online;
struct Player {
uint wins;
uint losses;
}
mapping (address => Player) public players;
constructor() public payable {
owner = msg.sender;
online = true;
}
modifier isOwner() {
require(msg.sender == owner, "Only owner can call this function");
_;
}
}TestGaming.sol
pragma solidity ^0.5.0;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Gaming.sol";
contract TestGaming {
uint public initialBalance = 10 ether;
Gaming gaming;
address owner;
function beforeAll() public {
gaming = Gaming(DeployedAddresses.Gaming());
owner = gaming.owner();
}
function testWithdrawFunds() public {
uint ownerBalanceBefore = owner.balance;
gaming.withdrawFunds();
uint ownerBalanceAfter = owner.balance;
Assert.equal (initialBalance, ownerBalanceAfter - ownerBalanceBefore, "The owner's balance should have increased by 10 ether");
}发布于 2022-08-27 19:24:42
在稳固性中,默认可见性是internal。对于此代码
address owner;它的能见度是内在的。Solidity为公共变量分配getter。
address public owner;您可以很容易地在混合上测试:
contract Test {
uint public firstVar=10;
uint secondVar=50;
}如果您将其部署在混合上,您将看到getter用于firstVar,而不是secondVar。
或者您可以为所有者编写getter函数:
function returnOwner() public view returns (address){
return owner
}https://stackoverflow.com/questions/73317097
复制相似问题