共享篋:单元测试代码解释
在这一节里,实现共享篋每一个模块的单元测试代码。
学习内容
- 了解和学习实现基于不同类型的单元测试方法
篇目
模块mod_bare
单元测试
// File: tests/u_for_mod_bare.rs // clear && cargo test // clear && cargo test --package mod_trait_exerci // $ clear && cargo test --test u_for_mod_bare #[cfg(test)] mod tests { use mod_trait_exerci::mod_bare; use mod_bare::StructType; use mod_bare::TupleType; #[test] fn it_works_with_struct_default() { let instance: StructType = Default::default(); assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_struct_struct() { let instance = StructType{data:(0)}; assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_struct() { let instance_default: StructType = Default::default(); let instance_struct = StructType{data:(0)}; assert_eq!(instance_default, instance_struct); } #[test] fn it_works_with_tuple_default() { let instance: TupleType = Default::default(); assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_tuple_struct() { let instance = TupleType(0); assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_tuple() { let instance_default: TupleType = Default::default(); let instance_tuple = TupleType(0); assert_eq!(instance_default, instance_tuple); } }
基于实例的模块mod_trait
单元测试
// File: tests/u_for_mod_trait_instance.rs // clear && cargo test // clear && cargo test --package mod_trait_exerci // $ clear && cargo test --test u_for_mod_trait_instance #[cfg(test)] mod tests { use mod_trait_exerci::mod_trait; use mod_trait::TraitCanal; use mod_trait::StructType; use mod_trait::TupleType; #[test] fn it_works_with_struct_default() { let instance: StructType = Default::default(); assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_struct_new() { let instance = StructType::new(0); assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_struct() { let instance_default: StructType = Default::default(); let instance_struct = StructType::new(0); assert_eq!(instance_default, instance_struct); } #[test] fn it_works_with_tuple_default() { let instance: TupleType = Default::default(); assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_tuple_struct() { let instance = TupleType::new(0); assert_eq!(0, instance.get_tuple()); assert_eq!((0), instance.get_tuple()); } #[test] fn it_works_with_tuple() { let instance_default: TupleType = Default::default(); let instance_tuple = TupleType::new(0); assert_eq!(instance_default, instance_tuple); } }
基于中间模块的实例单元测试
// File: tests/u_for_mod_trait_fn.rs // clear && cargo test // clear && cargo test --package mod_trait_exerci // $ clear && cargo test --test u_for_mod_trait_fn #[cfg(test)] mod tests { use mod_trait_exerci::mod_static_fn; use mod_trait_exerci::mod_dynamic_fn; use mod_trait_exerci::mod_trait; use mod_trait::StructType; use mod_trait::TupleType; #[test] fn it_works_with_fn_struct_default() { let instance: StructType = Default::default(); let data = mod_static_fn::get_static_type_ref(&instance); assert_eq!(0, data); assert_eq!((0), data); let data = mod_dynamic_fn::get_dynamic_trait_ref(&instance); assert_eq!(0, data); assert_eq!((0), data); } #[test] fn it_works_with_fn_tuple_default() { let instance: TupleType = Default::default(); let data = mod_static_fn::get_static_type_ref(&instance); assert_eq!(0, data); assert_eq!((0), data); let data = mod_dynamic_fn::get_dynamic_trait_ref(&instance); assert_eq!(0, data); assert_eq!((0), data); } }
基于中间模块静态函数的类型Box
单元测试
// File: tests/u_for_box_static_hello.rs // clear && cargo test // clear && cargo test --package mod_trait_exerci // clear && cargo test --test u_for_box_static_hello #[cfg(test)] mod tests { use mod_trait_exerci::mod_box_static_fn; use mod_trait_exerci::mod_trait; use mod_trait::StructType; use mod_trait::TraitCanal; use mod_trait::TupleType; #[test] fn struct_static_box() { let instance: StructType = Default::default(); let instance_box_type: Box<StructType> = Box::new(instance); //assert_eq!(0, mod_box_static_fn::get_static_type_ref(&instance_box_type)); //assert_eq!(0, mod_box_static_fn::get_static_box_ref(&instance)); assert_eq!(0, mod_box_static_fn::get_static_box_ref(&instance_box_type)); assert_eq!(0, mod_box_static_fn::get_static_box(instance_box_type)); } #[test] fn struct_static_box_ref_and_type_ref() { let instance: StructType = Default::default(); let instance_box_type: Box<&dyn TraitCanal> = Box::new(&instance); assert_eq!(0, mod_box_static_fn::get_static_box_and_type_ref(&instance_box_type)); assert_eq!(0, mod_box_static_fn::get_static_box_type_ref(instance_box_type)); } #[test] fn tuple_static_box() { let instance: TupleType = Default::default(); let instance_box_type: Box<TupleType> = Box::new(instance); assert_eq!(0, mod_box_static_fn::get_static_box_ref(&instance_box_type)); assert_eq!(0, mod_box_static_fn::get_static_box(instance_box_type)); } #[test] fn tuple_static_box_type() { let instance: TupleType = Default::default(); let instance_box_type: Box<&dyn TraitCanal> = Box::new(&instance); assert_eq!(0, mod_box_static_fn::get_static_box_and_type_ref(&instance_box_type)); assert_eq!(0, mod_box_static_fn::get_static_box_type_ref(instance_box_type)); } }
基于中间模块动态函数的类型Box
单元测试
// File: tests/u_for_box_dynamic_hello.rs // clear && cargo test // clear && cargo test --package mod_trait_exerci // clear && cargo test --test u_for_box_dynamic_hello #[cfg(test)] mod tests { use mod_trait_exerci::mod_box_dynamic_fn; use mod_trait_exerci::mod_trait; use mod_trait::StructType; use mod_trait::TraitCanal; use mod_trait::TupleType; #[test] fn struct_dynamic_box() { let instance: StructType = Default::default(); let instance_box_trait: Box<dyn TraitCanal> = Box::new(instance); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box_ref(&instance_box_trait)); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box(instance_box_trait)); } #[test] fn struct_dynamic_box_and_trait() { let instance: StructType = Default::default(); let instance_box_trait: Box<&dyn TraitCanal> = Box::new(&instance); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box_and_trait_ref(&instance_box_trait)); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box_trait_ref(instance_box_trait)); } #[test] fn tulpe_dynamic_box() { let instance: TupleType = Default::default(); let instance_box_trait: Box<dyn TraitCanal> = Box::new(instance); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box_ref(&instance_box_trait)); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box(instance_box_trait)); } #[test] fn tulpe_dynamic_box_trait() { let instance: TupleType = Default::default(); let instance_box_trait: Box<&dyn TraitCanal> = Box::new(&instance); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box_and_trait_ref(&instance_box_trait)); assert_eq!(0, mod_box_dynamic_fn::get_dynamic_box_trait_ref(instance_box_trait)); } }