pub struct XCTestSuite { /* private fields */ }Expand description
A concrete subclass of XCTest, XCTestSuite is a collection of test cases. Suites are usually managed by the IDE, but XCTestSuite also provides API for dynamic test and suite management:
XCTestSuite *suite = [XCTestSuite testSuiteWithName:@"My tests"];
[suite addTest:[MathTest testCaseWithSelector:@selector(testAdd)]];
[suite addTest:[MathTest testCaseWithSelector:@selector(testDivideByZero)]];
Alternatively, a test suite can extract the tests to be run automatically. To do so, pass the class of your test case class to the suite’s constructor:
XCTestSuite *suite = [XCTestSuite testSuiteForTestCaseClass:[MathTest class]];
This creates a suite with all the methods starting with “test” that take no arguments. Also, a test suite of all the test cases found in the runtime can be created automatically:
XCTestSuite *suite = XCTestSuite.defaultTestSuite;
This creates a suite of suites with all the XCTestCase subclasses methods that start with “test” and take no arguments.
See also Apple’s documentation
Implementations§
Source§impl XCTestSuite
impl XCTestSuite
pub fn defaultTestSuite() -> Retained<XCTestSuite>
pub fn testSuiteForBundlePath(bundle_path: &NSString) -> Retained<Self>
pub fn testSuiteForTestCaseWithName(name: &NSString) -> Retained<Self>
Sourcepub unsafe fn testSuiteForTestCaseClass(
test_case_class: &AnyClass,
) -> Retained<Self>
pub unsafe fn testSuiteForTestCaseClass( test_case_class: &AnyClass, ) -> Retained<Self>
§Safety
test_case_class probably has further requirements.
pub fn testSuiteWithName(name: &NSString) -> Retained<Self>
pub fn initWithName(this: Allocated<Self>, name: &NSString) -> Retained<Self>
pub unsafe fn new() -> Retained<Self>
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
pub fn addTest(&self, test: &XCTest)
pub fn tests(&self) -> Retained<NSArray<XCTest>>
Methods from Deref<Target = XCTest>§
Sourcepub fn testCaseCount(&self) -> NSUInteger
pub fn testCaseCount(&self) -> NSUInteger
Number of test cases. Must be overridden by subclasses.
Sourcepub fn testRunClass(&self) -> Option<&'static AnyClass>
pub fn testRunClass(&self) -> Option<&'static AnyClass>
The XCTestRun subclass that will be instantiated when the test is run to hold the test’s results. Must be overridden by subclasses.
Sourcepub fn testRun(&self) -> Option<Retained<XCTestRun>>
pub fn testRun(&self) -> Option<Retained<XCTestRun>>
The test run object that executed the test, an instance of testRunClass. If the test has not yet been run, this will be nil.
Sourcepub fn performTest(&self, run: &XCTestRun)
pub fn performTest(&self, run: &XCTestRun)
The method through which tests are executed. Must be overridden by subclasses.
Sourcepub fn runTest(&self)
pub fn runTest(&self)
Creates an instance of the testRunClass and passes it as a parameter to -performTest:.
Sourcepub fn setUpWithCompletionHandler(
&self,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2 only.
pub fn setUpWithCompletionHandler( &self, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2 only.Asynchronous set up method called before the invocation of each test method in the class.
This method is called before invoking setUpWithError, setUp, and the test method.
Parameter completion: A block which must be called to signal completion of set up.
May be called asynchronously. If the block’s error argument is non-nil, the specified error
is recorded as a thrown error issue.
Sourcepub fn setUpWithError(&self) -> Result<(), Retained<NSError>>
pub fn setUpWithError(&self) -> Result<(), Retained<NSError>>
This method is called before invoking setUp and the test method.
Sourcepub fn setUp(&self)
pub fn setUp(&self)
Setup method called before the invocation of each test method in the class.
Sourcepub fn tearDown(&self)
pub fn tearDown(&self)
Teardown method called after the invocation of each test method in the class.
Sourcepub fn tearDownWithError(&self) -> Result<(), Retained<NSError>>
pub fn tearDownWithError(&self) -> Result<(), Retained<NSError>>
This method is called after invoking the test method (if applicable) and
tearDown.
Sourcepub fn tearDownWithCompletionHandler(
&self,
completion: &DynBlock<dyn Fn(*mut NSError)>,
)
Available on crate feature block2 only.
pub fn tearDownWithCompletionHandler( &self, completion: &DynBlock<dyn Fn(*mut NSError)>, )
block2 only.Asynchronous tear down method called after invoking the test method.
This method is called after invoking the test method (if applicable), tearDown, and
tearDownWithError.
Parameter completion: A block which must be called to signal completion of tear down.
May be called asynchronously. If the block’s error argument is non-nil, the specified error
is recorded as a thrown error issue.
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init/new methods).
§Example
Check that an instance of NSObject has the precise class NSObject.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load instead.Use Ivar::load instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T.
See Ivar::load_ptr for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T.
This is the reference-variant. Use Retained::downcast if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString to a NSMutableString,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass: for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject.
§Panics
This works internally by calling isKindOfClass:. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject and
NSProxy implement this method.
§Examples
Cast an NSString back and forth from NSObject.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();Try (and fail) to cast an NSObject to an NSString.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}Trait Implementations§
Source§impl AsRef<AnyObject> for XCTestSuite
impl AsRef<AnyObject> for XCTestSuite
Source§impl AsRef<NSObject> for XCTestSuite
impl AsRef<NSObject> for XCTestSuite
Source§impl AsRef<XCTest> for XCTestSuite
impl AsRef<XCTest> for XCTestSuite
Source§impl AsRef<XCTestSuite> for XCTestSuite
impl AsRef<XCTestSuite> for XCTestSuite
Source§impl Borrow<AnyObject> for XCTestSuite
impl Borrow<AnyObject> for XCTestSuite
Source§impl Borrow<NSObject> for XCTestSuite
impl Borrow<NSObject> for XCTestSuite
Source§impl Borrow<XCTest> for XCTestSuite
impl Borrow<XCTest> for XCTestSuite
Source§impl ClassType for XCTestSuite
impl ClassType for XCTestSuite
Source§const NAME: &'static str = "XCTestSuite"
const NAME: &'static str = "XCTestSuite"
Source§type ThreadKind = <<XCTestSuite as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<XCTestSuite as ClassType>::Super as ClassType>::ThreadKind
Source§impl Debug for XCTestSuite
impl Debug for XCTestSuite
Source§impl Deref for XCTestSuite
impl Deref for XCTestSuite
Source§impl Hash for XCTestSuite
impl Hash for XCTestSuite
Source§impl Message for XCTestSuite
impl Message for XCTestSuite
Source§impl NSObjectProtocol for XCTestSuite
impl NSObjectProtocol for XCTestSuite
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass directly, or cast your objects with AnyObject::downcast_ref