cairo单元测试

前言

写区块链智能合约离不开单元测试,甚至有些都是测试驱动开发,没有单元测试,没法保证程序可靠性,所以自己开发的,部署到链上的新合约一定要有单元测试保证。所以看一下cairo的单元测试写法。

第一个简单case学习用法

使用scarb 创建

scarb new firstcase

firstcase
├── Scarb.toml
└── src
    └── lib.cairo

在lib.cairo中写入如下代码:

   #[test]
    fn it_works() {
        let result = 2 + 2;
        assert(result == 4, 'result is not 4');
    }

运行测试case: scarb cairo-test

$ scarb cairo-test
testing adder...
running 1 tests
test adder::lib::tests::it_works ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 filtered out;

以上就是一个最简单的测试用例,没有测试任何测试函数,但是学些了测试case的写法,主要的语法要点是: [test] , assert。

assert

和其他语言一样,cairo使用assert,来断言case是否正确。assert接收两个参数, 第一个参数是bool, 第二个参数是一个字符串msg。如果第一个参数是true,则测试通过。如果第一个参数是false, 则抛出一个包含第二个参数内容的 panic。

should_panic

如果测试的case期望抛出panic, 那么就用#[should_panic] 修饰测试函数。这样程序就认为这是一个预期之内的panic。

#[test]

#[should_panic]'

运行指定测试例子

有时候,所有测试case运行起来很费时间,只需要运行某个指定的case(因为可能只是修改了这个case内部的逻辑),使用如下的方式 scarb cairo-test -f  (过滤器),如下代码,只想运行add_two_and_two 这一个case。运行命令与输出结果如第二个图。

#[cfg(test)]
mod tests {
    #[test]
    fn add_two_and_two() {
        let result = 2 + 2;
        assert(result == 4, 'result is not 4');
    }

    #[test]
    fn add_three_and_two() {
        let result = 3 + 2;
        assert(result == 5, 'result is not 5');
    }
}
scarb cairo-test -f add_two_and_two
running 1 tests
test adder::lib::tests::add_two_and_two ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 1 filtered out;

忽略case

有时候,我们想忽略某些个case,但是不想用-f参数,这个毕竟属于白名单性质。 忽略case属于直接跳过。 那么就可以用 #[ignore] 装饰。

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        let result = 2 + 2;
        assert(result == 4, 'result is not 4');
    }

    #[test]
    #[ignore]
    fn expensive_test() { // code that takes an hour to run
    }
}

使用了#[ignore]的case。expensive_test  在使用命令 scarb cairo-test测试时候 就不会运行了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值