美文网首页
julia编程 单元测试的写法

julia编程 单元测试的写法

作者: mudssky | 来源:发表于2021-07-06 14:56 被阅读0次

julia是一门十分适合用于科学计算的语言.

个人学习julia的主要目的就是为了科学计算,相比于python,性能要高得多.因此生态什么的关系不是很大,本来就是当作计算器使用的,语言本身的特性,比如支持一些数学运算的运算符直接使用,很适合用来写数学式子.

当你写完一个工具函数,往往需要进行功能的测试,这时候顺便写一个单元测试,就能为你以后维护代码,修bug也提供许多便利.

@test

julia提供了一些宏可以用于单元测试

我们先引入Test包

using Test

使用names函数可以查看一个模块中export导入的变量,其中imported参数设置为true可以用于查看导入的包,all设置为true可以查看没有exported的变量

我们在julia中查看

julia> names(Test)
19-element Vector{Symbol}:
 Symbol("@inferred")
 Symbol("@test")
 Symbol("@test_broken")
 Symbol("@test_deprecated")
 Symbol("@test_logs")
 Symbol("@test_nowarn")
 Symbol("@test_skip")
 ⋮
 :GenericSet
 :GenericString
 :Test
 :TestSetException
 :detect_ambiguities
 :detect_unbound_args

@test可以用于测试

@test true
@test [1, 2] + [2, 1] == [3, 3]

运行测试文件,如果有没通过的地方就会报错

@test_throws

这个是用于检测抛出错误的测试,可以用来测试你的函数是否和预期的一样抛出错误。

比如参数校验的时候,如果参数不合法,你可以抛出来一个ArgumentError,这个时候我们测试参数检验功能就可以用这个

julia> @test_throws BoundsError [1, 2, 3][4]
Test Passed
      Thrown: BoundsError

julia> @test_throws DimensionMismatch [1, 2, 3] + [1, 2]
Test Passed
      Thrown: DimensionMismatch

@testset

如果你有很多测试要跑的时候,可以用@testset,这个就比较像其他语言里的测试框架了,比如js的mocha,所以说@test就相当于asset函数,mocha还支持expect.js,should.js等断言库,可读性更高罢了。

julia> @testset "Foo Tests" begin
           @test foo("a")   == 1
           @test foo("ab")  == 4
           @test foo("abc") == 9
       end;
Test Summary: | Pass  Total
Foo Tests     |    3      3

@testset的特点是里面的@test语句,并不会因为中间的一个发生错误就停止,而是先跳过,最后汇总错误数目。

而且@testset是可以嵌套使用的

实战

写了一个计算排列组合的包

我写的测试如下,其中verbose=true,开启后嵌套的测试信息也能正常显示

using Test
include("../src/probabilities.jl")


@testset verbose = true "probabilities" begin
    @testset "probabilities.A" begin
        # 测试m为0的情况
        @test probabilities.A(0, 1) == 1
        # 测试参数校验功能, m不能大于n,两者都不能为负数
        @test_throws ArgumentError probabilities.A(0, 0) 
        @test_throws ArgumentError probabilities.A(0, -1)
        @test_throws ArgumentError probabilities.A(3, -1)
        @test_throws ArgumentError probabilities.A(3, 2) 
        # 测试正常计算
        @test probabilities.A(3, 3) == factorial(3)
        @test probabilities.A(10, 10) == factorial(10)
        @test probabilities.A(2, 3) == 6
    end
    @testset "probabilities.C" begin
        # 测试m为0的情况
        @test probabilities.C(0, 1) == 1
        # 测试参数校验功能, m不能大于n,两者都不能为负数
        @test_throws ArgumentError probabilities.C(0, 0) 
        @test_throws ArgumentError probabilities.C(0, -1)
        @test_throws ArgumentError probabilities.C(3, -1)
        @test_throws ArgumentError probabilities.C(3, 2) 
        # 测试正常计算
        @test probabilities.C(3, 3) == 1
        @test probabilities.C(10, 10) == 1
        @test probabilities.C(2, 3) == 3
    end
end

测试结果如下:

PS C:\Projects\juliaPackages\test> julia .\probabilities_test.jl
Test Summary: | Pass  Total
probabilities |   16     16
  probabilities.A |    8      8
  probabilities.C |    8      8

相关文章

  • julia编程 单元测试的写法

    julia是一门十分适合用于科学计算的语言. 个人学习julia的主要目的就是为了科学计算,相比于python,性...

  • Jupyter with Julia

    Julia语言入门 Julia的安装和运行 Julia程序语言介绍 Julia程序语言是一种计算机编程语言, 就像...

  • Julia 1.4 发布,高性能动态高级编程语言

    Julia 1.4 发布,高性能动态高级编程语言 Julia 1.4.0 现已发布。 Julia 是一个高性能动态...

  • Julia编程语言因何伟大?

    Julia编程语言是第一个我看到就想学习的唯一编程语言,个人认为Julia是目前为止最伟大的编程语言。那么,伟大之...

  • 高兴地,Julia 1.0发布

    Julia是一个新的,有野心的编程语言,特别适合科学计算,希望这是你深爱着的。 Julia语言下载 Julia语言...

  • Julia1.0安装教程

    总有喜欢作死的小伙伴,想尝尝新编程语言的快感吗?来~ Julia1.0安装教程 1. 下载Julia,我测试的平台...

  • 单元测试及unittest单元测试框架

    一、单元测试 1、单元测试:在计算机编程中,单元测试(Unit Testing),又称为模块测试,是针对程序模块(...

  • julia lang 编程 随记

    【知识点】julia中dataframe合并操作——直接合并和使用预分配的时间差别 一、直接使用append!(d...

  • ES6 面向对象 class 类

    新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。 传统的写法 class ES6新写法...

  • 碾压 Python!为什么 Julia 速度这么快?

    短短几年,由 MIT CSAIL 实验室开发的编程语言 Julia 已然成为编程界的新宠,尤其在科学计算领域炙手可...

网友评论

      本文标题:julia编程 单元测试的写法

      本文链接:https://www.haomeiwen.com/subject/rcegultx.html