8个版本 (破坏性更新)
0.15.3 | 2020年8月23日 |
---|---|
0.6.1 | 2020年8月17日 |
0.6.0 | 2020年3月23日 |
0.4.0 | 2019年9月26日 |
0.1.0 | 2019年2月18日 |
在 #amethyst 中排名 25
每月下载 50 次
1MB
3K SLoC
测试工具集,支持对Amethyst类型的测试,包括
包
状态
系统
- 资源加载。
- 在处理过程中系统使用的任意类型。
测试工具集最小化了设置Amethyst Application
的样板代码,并可以通过薄接口接收通常被多层掩盖的逻辑。
用法
以下是一个测试State
的简单示例。更多示例在示例部分。
#
#
#
#
#
#
#
#
// #[test]
fn loading_state_adds_load_resource() {
assert!(
AmethystApplication::blank()
.with_state(|| LoadingState::new())
.with_assertion(|world| {
world.read_resource::<LoadResource>();
})
.run()
.is_ok()
);
}
#
Amethyst应用程序通过以下函数之一初始化,每个函数提供不同的一组包
use amethyst_test::prelude::*;
#[test]
fn test_name() {
// Start with no bundles
AmethystApplication::blank();
// Start with the following bundles:
//
// * `TransformBundle`
// * `InputBundle`
// * `UiBundle`
//
// The type parameters here are the Axis and Action types for the
// `InputBundle` and `UiBundle`.
use amethyst::input::StringBindings;
AmethystApplication::ui_base::<StringBindings>();
// If you need types from the rendering bundle, make sure you have
// the `"test-support"` feature enabled:
//
// ```toml
// # Cargo.toml
// amethyst = { version = "..", features = ["test-support"] }
// ```
//
// Then you can include the `RenderEmptyBundle`:
use amethyst::renderer::{types::DefaultBackend, RenderEmptyBundle};
AmethystApplication::blank()
.with_bundle(RenderEmptyBundle::<DefaultBackend>::new());
}
然后,使用各种.with_*(..)
方法附加您要测试的逻辑
#
#
#
#[test]
fn test_name() {
let visibility = false; // Whether the window should be shown
AmethystApplication::render_base::<String, String, _>("test_name", visibility)
.with_bundle(MyBundle::new()) // Registers a bundle.
.with_bundle_fn(|| MyNonSendBundle::new()) // Registers a `!Send` bundle.
.with_resource(MyResource::new()) // Adds a resource to the world.
.with_system(MySystem, "my_sys", &[]) // Registers a system with the main
// dispatcher.
// These are run in the order they are invoked.
// You may invoke them multiple times.
.with_setup(|world| { /* do something */ })
.with_state(|| MyState::new())
.with_effect(|world| { /* do something */ })
.with_assertion(|world| { /* do something */ })
// ...
}
最后,调用.run()
来运行应用程序。这返回amethyst::Result<()>
,因此您可以将它包裹在assert!(..);
中
#[test]
fn test_name() {
let visibility = false; // Whether the window should be shown
assert!(
AmethystApplication::render_base("test_name", visibility)
// ...
.run()
.is_ok()
);
}
示例
测试包
#
#
#
#
#
#
// #[test]
fn bundle_registers_system_with_resource() {
assert!(
AmethystApplication::blank()
.with_bundle(MyBundle)
.with_assertion(|world| { world.read_resource::<ApplicationResource>(); })
.run()
.is_ok()
);
}
#
测试系统
#
#
#
#
#
#
// #[test]
fn system_increases_component_value_by_one() {
assert!(
AmethystApplication::blank()
.with_system(MySystem, "my_system", &[])
.with_effect(|world| {
let entity = world.create_entity().with(MyComponent(0)).build();
world.insert(EffectReturn(entity));
})
.with_assertion(|world| {
let entity = world.read_resource::<EffectReturn<Entity>>().0.clone();
let my_component_storage = world.read_storage::<MyComponent>();
let my_component = my_component_storage
.get(entity)
.expect("Entity should have a `MyComponent` component.");
// If the system ran, the value in the `MyComponent` should be 1.
assert_eq!(1, my_component.0);
})
.run()
.is_ok()
);
}
#
在自定义调度器中测试系统。当您的系统必须在完成一些设置后运行时,这很有用
#
#
#
#
#
// #[test]
fn system_increases_resource_value_by_one() {
assert!(
AmethystApplication::blank()
.with_setup(|world| {
world.insert(MyResource(0));
})
.with_system_single(MySystem, "my_system", &[])
.with_assertion(|world| {
let my_resource = world.read_resource::<MyResource>();
// If the system ran, the value in the `MyResource` should be 1.
assert_eq!(1, my_resource.0);
})
.run()
.is_ok()
);
}
#
依赖关系
~36–58MB
~887K SLoC