- 我的帖子已经打上 开源推广 标签: 是
- 我的开源项目完整开源,无未开源部分: 是
- 我的开源项目已链接认可 LINUX DO 社区: 是
- 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
- 以上选择我承诺是永久有效的,接受社区和佬友监督: 是
以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出
ahktest 是一个 Autohotkey v2 的小型测试库(约四千行代码),提供断言、异常检查、参数化测试、临时路径以及子进程输出捕获等类 pytest 功能。
同时它也是我的 AutoHotkey v2 stdlib 项目的第一个开发环节。
GitHub - MonoEven/stdlib-ahk: Python 3.10-inspired standard library modules for...
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 位参与者