【开源】AutoHotkey v2 stdlib 构建计划:测试模块 ahktest 已开源

【开源】AutoHotkey v2 stdlib 构建计划:测试模块 ahktest 已开源
【开源】AutoHotkey v2 stdlib 构建计划:测试模块 ahktest 已开源
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
  • 我的帖子已经打上 开源推广 标签:
  • 我的开源项目完整开源,无未开源部分:
  • 我的开源项目已链接认可 LINUX DO 社区:
  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出:
  • 以上选择我承诺是永久有效的,接受社区和佬友监督:

以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出

ahktest 是一个 Autohotkey v2 的小型测试库(约四千行代码),提供断言、异常检查、参数化测试、临时路径以及子进程输出捕获等类 pytest 功能。

同时它也是我的 AutoHotkey v2 stdlib 项目的第一个开发环节。

github.com

GitHub - MonoEven/stdlib-ahk: Python 3.10-inspired standard library modules for...

main

Python 3.10-inspired standard library modules for AutoHotkey v2, with a stable include surface, examples, and ahktest-backed parity tests. - MonoEven/stdlib-ahk

代码使用示例:

#Requires AutoHotkey v2.0
#Include <stdlib\ahktest>

AhkTest.Clear()

; 1. 基础断言
AhkTest.Test("basic assertions", (*) => (
    AhkTest.AssertEqual(4, 2 + 2),
    AhkTest.AssertContains("Hotkey", "AutoHotkey"),
    AhkTest.AssertRegex("v2.0", "^v\d")
))

; 2. 检查异常类型和错误信息
AhkTest.Test("raises match", (*) =>
    AhkTest.RaisesMatch(ValueError, "bad input", (*) => ThrowBadInput())
)

; 3. 参数化测试:用多组输入运行同一段测试逻辑
AhkTest.Parametrize("addition {id}", [
    { Id: "small", Args: [1, 2, 3] },
    { Id: "large", Args: [10, 20, 30] }
], (left, right, expected) => AhkTest.AssertEqual(expected, left + right))

; 4. 临时目录 fixture:测试结束后自动清理
AhkTest.Fixture("tmp", (*) => AhkTest.TempPathFixture("demo"))
AhkTest.Test("writes temp file", (tmp) => CheckTempFile(tmp), { Fixtures: ["tmp"] })

; 5. 捕获子进程的 stdout、stderr 和退出码
AhkTest.Fixture("capture", (*) => AhkTest.CaptureFixture())
AhkTest.Test("captures command output", (capture) => CheckCommand(capture), { Fixtures: ["capture"] })

; SetOutputFile用于将测试报告写入文件,从而允许双击运行、从编辑器运行,或者在没有有效 stderr 句柄的环境中运行。
; 一般在库开发调试时不采用这种方式。
report := A_ScriptDir "\ahktest-report.txt"
AhkTest.SetOutputFile(report)

result := AhkTest.Run()

MsgBox "AhkTest finished.`n`n"
    . "Report: " report "`n"
    . "Total: " result.Total "`n"
    . "Passed: " result.Passed "`n"
    . "Failed: " result.Failed "`n"
    . "Errors: " result.Errors "`n"
    . "Skipped: " result.Skipped

ExitApp result.ExitCode

ThrowBadInput() {
    throw ValueError("bad input: name", -1)
}

CheckTempFile(tmp) {
    path := tmp.File("data.txt", "hello")
    AhkTest.AssertEqual("hello", FileRead(path, "UTF-8"))
}

CheckCommand(capture) {
    result := capture.Run('echo hello & exit /b 3')
    AhkTest.AssertEqual(3, result.ExitCode)
    AhkTest.AssertContains("hello", result.Out)
}

运行结果(参考):

PASS basic assertions (0ms)
PASS raises match (0ms)
PASS addition small (0ms)
PASS addition large (0ms)
PASS writes temp file (641ms)
PASS captures command output (78ms)

Ran 6 tests in 750ms
Passed: 6, Failed: 0, Errors: 0, Skipped: 0

1 个帖子 - 1 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文