Simple BDD for iOS

Related tags

Testing Kiwi
Overview

Kiwi Logo

Kiwi: Simple BDD for iOS

Build Status

Kiwi is a Behavior Driven Development library for iOS development. The goal is to provide a BDD library that is exquisitely simple to setup and use.

Why?

The idea behind Kiwi is to have tests that are more readable than what is possible with the bundled test framework.

Tests (or rather specs) are written in Objective-C and run within the comfort of Xcode to provide a test environment that is as unobtrusive and seamless as possible in terms of running tests and error reporting.

Specs look like this:

describe(@"Team", ^{
    context(@"when newly created", ^{
        it(@"has a name", ^{
            id team = [Team team];
            [[team.name should] equal:@"Black Hawks"];
        });

        it(@"has 11 players", ^{
            id team = [Team team];
            [[[team should] have:11] players];
        });
    });
});

Documentation

The Kiwi Wiki is the official documentation source.

Getting it

To install via CocoaPods, add this to your Podfile:

pod "Kiwi"

Or via Carthage, add this to Cartfile.private:

github "kiwi-bdd/Kiwi"

Support

For all the questions / suggestions you have, that aren't bug reports please use our Google Group

Comments
  • Kiwi 3.0

    Kiwi 3.0

    It's been lots of changes and feedback since 2.0 is released, thanks everyone for great feedback and patches.

    Due to some internal changes introduced by APL, we'll need to restructure things a bit. For this milestone, the following things should need to be done:

    • [x] Migrate to ARC
    • [ ] Make asynchronous testing the best ever (eva' eva' eva')
    • [x] Make Kiwi compatible with Xcode test runner
    • [ ] AppCode compatibility
    • [ ] Augment test output so it can take a format argument and be extensible
    • [ ] Make the readme and documentation cleaner. We need good samples from the real world
    • [x] If possible, create a logo and a decent website
    opened by supermarin 35
  • Adding tests and fixing issues related to KWCaptureSpy, KWMessagePattern, and block based stubs

    Adding tests and fixing issues related to KWCaptureSpy, KWMessagePattern, and block based stubs

    These commits fix some issues that I found in Kiwi while implementing tests for some fairly complicated code. For all the fixes I made I first added a failing test that demonstrated the issue.

    The one change that I made that is not demonstrated by a test is the re-write of the KWObjCTypeLength function in the KWObjCUtilities.m file. However many tests depend on this so it should be covered. The previous method was somewhat hacky (using an NSMethodSignature instance to determine the size of a type), and I simply converted it to use the proper runtime methods.

    It is worth noting that the issue I resolved in f8c202b was somewhat disconcerting. It appears that the ARC version of the KWCaptureSpy was not properly retaining the argument it was capturing. By the time I tracked down the issue I didn't have a significant amount of time to spend figuring it out, so I reworked the KWCaptureSpy to no longer use ARC. This did resolve the issue, but is obviously not the ideal solution.

    opened by csky-ios 28
  • Undefined symbols for architecture armv7

    Undefined symbols for architecture armv7

    Hi everyone,

    I'm getting a wired error, just followed the getting started tutorial step by step and ended up with this linker error when running the test target

    Undefined symbols for architecture armv7:
      "_unw_step", referenced from:
          _kwCallerAddress in libPods-MyApp.a(KWSymbolicator.o)
      "_unw_getcontext", referenced from:
          _kwCallerAddress in libPods-MyApp.a(KWSymbolicator.o)
      "_unw_init_local", referenced from:
          _kwCallerAddress in libPods-MyApp.a(KWSymbolicator.o)
      "_unw_get_reg", referenced from:
          _kwCallerAddress in libPods-MyApp.a(KWSymbolicator.o)
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    Xcode can't find the definition of the unw_step function, so there is indeed something wrong... but got no clue yet.

    Does someone already went through this ?

    opened by dulacp 27
  • Support .xctest Unit Testing Bundles

    Support .xctest Unit Testing Bundles

    Summary of Changes

    • Add Kiwi subspec "Kiwi/XCTest" which imports XCTest framework in a precompiled header.
    • KWSpec inherits from XCTestCase or SenTestCase based on whether XCT_EXPORT is defined. This is a macro defined in <XCTest/XCTestDefines.h>, which is imported in the precompiled header for the XCTest subspec.
    • XCTestCase has a different API for reporting failures (SenTestingKit's failWithException: vs. XCTest's recordFailureWithDescription:inFile:atLine:expected:), so KWSpec.m determines which method it responds to and sends the appropriate one.
    • Implement -name method on KWSpec. XCTest uses -name, not -description like SenTestingKit, in order to display test results in test navigator.
    • Add Kiwi-XCTest (shared) and KiwiXCTests targets. Kiwi-XCTest is identical to the Kiwi target, except it imports XCTest framework, just like the "Kiwi/XCTest" subspec does. KiwiXCTests contains functional tests which assert the precompiled header works as intended. KiwiXCTests can be added to .travis.yml as soon as Travis CI begins using Xcode 5 (see 343a1ee).
    • Fix Travis CI tests by including the code in PR #367.

    Result

    The following is a screenshot of test results on a fresh Xcode 5 project using the Kiwi/XCTest subspec. Note that tests are run and reported in the test navigator, even though the test bundle has an extension of .xctest.

    Background

    .xctest bundles do not run any tests defined on subclasses of SenTestCase. Prior to this commit, KWSpec inherits from SenTestCase. This means that developers creating new projects using Xcode 5, which includes an .xctest bundle by default, cannot use Kiwi to run tests on new projects.

    Simply changing the base class of KWSpec from SenTestCase to XCTestCase, on the other hand, causes the opposite problem to occur; .octest bundles only run tests associated with subclasses of SenTestCase, so the XCTestCase classes are ignored.

    Since there is no way to programmatically determine whether the test bundle has an .xctest or .octest extension, this commit leaves it up to the user to specify. Developers using .octest bundles do not need to do anything; this commit changes the default subspec to be compatible with SenTestingKit, just as it was before. Developers using .xctest bundles, however, can specify the Kiwi/XCTest subspec in order to have KWSpec inherit from XCTestCase.


    I would appreciate feedback on this approach. Adding an additional subspec might be too much work for users, but I can't think of a better approach. Adding additional targets for functional tests (Kiwi-XCTest and KiwiXCTests) also clutters the project a bit. However, all the changes are well tested as a result.

    It would be great to get some sort of XCTest support out there before Xcode 5 comes out next week. :wink: :soon:

    opened by modocache 26
  • Xcode <REDACTED> support

    Xcode support

    Thought I'd get in early with this while some of the core team is there at WWDC. (Though it's likely that you're already aware of this, anyway.)

    Xcode 's new test navigator lists Kiwi test classes, but not the actual examples—presumably because they're built at runtime.

    In fact they do appear while the test suite is running, but then once if completes the test counter goes back to "0 tests".

    Is there any chance Kiwi will be able to integrate better with Xcode ?

    –Adam

    opened by sharplet 23
  • Kiwi 2.0 - Reboot

    Kiwi 2.0 - Reboot

    Reboot

    Development has been stalled for the past year. I have not been the best maintainer. Now, this changes. The admittedly lofty goal is for Kiwi to become the test library for iOS.

    This is the announcement for the 2.0 plan, where the goal is refinement and focus areas based on the biggest issues with the library.

    Focus areas

    1. Deliberate higher level testing support (primarily UIKit components). Kiwi is pretty good at testing domain model and controller objects, but lets face it - a big part of iOS is UI and Kiwi sucks at it.
    2. Streamlined installation and usage of the library. Too many people can't figure out how to configure their environment to work with Kiwi. There are also too many ways to install Kiwi.
    3. Documentation enhancements to cover not only how to use Kiwi, but also what to use it for. A library is pointless if most people are using it wrong. Worse, they may think they are using it right.
    4. Fixing of the most essential outstanding issues.
    5. Getting the community involved more to keep the project active.

    Bonus - we need better versioning and roadmapping

    Anything that is not directly related to one of the 5 focus areas below will be deprioritized.

    Contribute

    We already have a bunch of great guys helping on Kiwi, @lukeredpath, @nheagy, and @mneorr. But lets face it - this is open source. Projects die and rot without community involvement. If you are interesting in helping on any part of Kiwi (1-5 above), contact me. We need your help.

    Pull requests are absolutely welcome, but even better, open an issue so that we can discuss them first! PRs from out of the blue are very difficult to evaluate.

    Feel free to participate in any discussions. Tell us about the problems you want Kiwi to solve and what you want 2.0 to be good at.

    First steps I'll take

    • Outstanding open issues will be triaged based on the focus areas above
    • A more concrete set of issues/tasks will be derived from the focus areas above
    • A proper roadmap will be made, with a clear target for a 2.0 release
    • Implementation galore (with your help)

    References

    • http://blog.thepete.net/blog/2012/11/18/writing-ios-acceptance-tests-using-kiwi/
    • http://dimsumthinking.com book

    Plug

    Since I need to pay the bills, if you have iOS (or Android) projects you need help with from experts, give me a ping.

    opened by allending 22
  • Xcode 6 GM fails to load test bundle for **MAC** application test target

    Xcode 6 GM fails to load test bundle for **MAC** application test target

    Environment:

    • Xcode 6 Beta 6
    • Kiwi 2.3
    • CocoaPods 0.33.1

    Description: I'm trying to run my Kiwi spec suite under Xcode 6B6 and I'm getting the "<AppNameTests>.xctest" couldn't be loaded error.

    I also went to the trouble of explicitly dragging the Xcode 6B6 version of the XCTest.framework file and linking it to my test suite as well as adding the $(PLATFORM_DIR)/Developer/Library/Frameworks directory to my Framework Search Paths Build Setting for the test bundle.

    Obviously, there were ZERO problems with this under Xcode 5.1.1.

    Here's the console output:

    IDEBundleInjection.c: Error 3587 loading bundle '/Users/achilles/Library/Developer/Xcode/DerivedData/SingularityOne-ffgvwdrrxrlnvbauqgmrebtgywsw/Build/Products/Debug/SingularityOneTests.xctest': The bundle “SingularityOneTests.xctest” couldn’t be loaded because it is damaged or missing necessary resources.
    DevToolsBundleInjection environment:
    XCInjectDiagnostics: (null)
    XCInjectBundleInto: /Users/achilles/Library/Developer/Xcode/DerivedData/SingularityOne-ffgvwdrrxrlnvbauqgmrebtgywsw/Build/Products/Debug/SingularityOne.app/Contents/MacOS/SingularityOne
    XCInjectBundle: /Users/achilles/Library/Developer/Xcode/DerivedData/SingularityOne-ffgvwdrrxrlnvbauqgmrebtgywsw/Build/Products/Debug/SingularityOneTests.xctest
    TestBundleLocation: /Users/achilles/Library/Developer/Xcode/DerivedData/SingularityOne-ffgvwdrrxrlnvbauqgmrebtgywsw/Build/Products/Debug/SingularityOneTests.xctest
    TMPDIR: /var/folders/zy/q51vhcf91xl5j47fxzm424pm0000gn/T/
    DYLD_LIBRARY_PATH: /Users/achilles/Library/Developer/Xcode/DerivedData/SingularityOne-ffgvwdrrxrlnvbauqgmrebtgywsw/Build/Products/Debug
    DYLD_INSERT_LIBRARIES: /Applications/Xcode6-Beta6.app/Contents/Developer/Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection
    DYLD_FRAMEWORK_PATH: /Users/achilles/Library/Developer/Xcode/DerivedData/SingularityOne-ffgvwdrrxrlnvbauqgmrebtgywsw/Build/Products/Debug
    DYLD_FALLBACK_LIBRARY_PATH: (null)
    DYLD_FALLBACK_FRAMEWORK_PATH: /Applications/Xcode6-Beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks
    
    
    *** Test session exited(82). without checking in. Executable cannot be loaded for some other reason, such as a problem with a library it depends on or a code signature/entitlements mismatch. Retry after a Clean build. If you believe this error represents a bug, please attach the log file at /var/folders/zy/q51vhcf91xl5j47fxzm424pm0000gn/T/com.apple.dt.XCTest-status/Session-2014-08-27_17:38:33-kIEHCX.log
    
    opened by samkrishna 21
  • ARC Conversion: Volume 1

    ARC Conversion: Volume 1

    Converted all classes to ARC, except KWIntercept, KWMessagePattern, KWStub and KWSymbolicator, which seem to be causing problems. Those will be tackled in a later PR.

    opened by stepanhruda 21
  • 'class_getMethodImplementation_stret' is unavailable: not available in arm64

    'class_getMethodImplementation_stret' is unavailable: not available in arm64

    Working on a small POC project using kiwi.

    I'm able to compile this on xcode 5.0 no issues but the same code refuses to compile using jetbrains appcode.

    Building target 'Pods-XXXX-Kiwi' from 'Pods' with configuration 'Debug' for architecture 'armv7' using 'iOS 7.0' sdk

    compilation fails with error

    'class_getMethodImplementation_stret' is unavailable: not available in arm64

    Any thoughts?

    appreciate your help.

    opened by parthisubu 20
  • Implement run a single spec

    Implement run a single spec

    Add the ability to focus on single specs. I use this to speed up development on large projects with lots of specs.

    Example use:

    FOCUS()

    or

    FOCUS_TEST_SUITE("MYSPEC")

    SPEC_BEGIN(MYSPEC)

    //Some specs

    SPEC_END

    Priority Feature 
    opened by jerrymarino 20
  • Kiwi 2.0 - Installing/configuring Kiwi

    Kiwi 2.0 - Installing/configuring Kiwi

    Lets tackle streamlined installation as the first task in 2.0 as I think that is the biggest barrier to entry for new uses.

    I'd like to get feedback on how people are installing/using Kiwi in their projects in terms of configuration.

    The current documentation (https://github.com/allending/Kiwi/wiki/Guide:-Up-and-Running-with-Kiwi) requires adding the Kiwi project directly to the main project and creating a test target.

    What sucks:

    • The current install process has way too many steps. This leads to many ways to configure Kiwi usage wrongly and causes user frustration.
    • There are various other ways advanced users can configure Kiwi for use which is non-supported officially and may break at any time
    • Git submodules are confusing and scare developers
    • Current versioning is an absolute PITA

    My current thoughts:

    • This needs to be as drag and drop as possible
    • I really really really want there to be one correct way to use the library, targeting production environments. Fragmentation leads to confusion.
    • Highly discourage checking out the Kiwi repository unless you are developing Kiwi.
    • Simplify usage of library: provide official versions on the static versioned libKiwi.a library, and headers
    • Setup process involves referencing the static lib, configuring target with needed flags to prevent elision of symbols, and adding headers to search path.
    • Should we consider making a framework for this?
    • A script to automate setting up targets correctly?
    • In general, and especially with the intended better planned roadmap, we will keep the main repository for development purposes and users should generally be using a stable version of Kiwi in production.
    • Officially support CocoaPods installation (better docs, description, etc)?

    What are your thoughts? What can we do to make this elegant?

    Documentation 
    opened by allending 20
  • Add Swift PM support

    Add Swift PM support

    SPM requires the public headers to be in the same folder, but they are scattered all over the project. So I created a separate folder for the public headers, because without this <Kiwi/*.h> imports in Kiwi.h file will break.

    opened by GLinnik21 3
  • fix: avoid crash when clear all stubed object

    fix: avoid crash when clear all stubed object

    there is a crash when some stubed object has been release during one testcase

    crash stack:

    1. KWInterceptedObjectKey()
    2. KWObjectClassRestored()
    3. KWClearAllObjectStubs()
    ...
    

    reason

    1. when stubedObject has been release, key() at line 3 in KWClearAllObjectStubs() will return nil
    void KWClearAllObjectStubs(void) {
        for (KWInterceptedObjectBlock key in KWObjectStubs) {
            id stubbedObject = key();
            if (KWObjectClassRestored(stubbedObject)) {
                continue;
            }
            KWRestoreOriginalClass(stubbedObject);
        }
        [KWObjectStubs removeAllObjects];
    }
    
    1. KWObjectClassRestored() invoke KWInterceptedObjectKey() with nil
    BOOL KWObjectClassRestored(id anObject) {
        return [KWRestoredObjects containsObject:KWInterceptedObjectKey(anObject)];
    }
    
    1. objc_setAssociatedObject() will crash when anObject is nil, and key is not nil
    KWInterceptedObjectBlock KWInterceptedObjectKey(id anObject) {
        KWInterceptedObjectBlock key = objc_getAssociatedObject(anObject, kKWInterceptedObjectKey);
        if (key == nil) {
            __weak id weakobj = anObject;
            key = ^{ return weakobj; };
            objc_setAssociatedObject(anObject, kKWInterceptedObjectKey, [key copy], OBJC_ASSOCIATION_COPY);
        }
        return key;
    }
    

    according to https://opensource.apple.com/source/objc4/objc4-781/runtime/objc-references.mm

    void
    _object_set_associative_reference(id object, const void *key, id value, uintptr_t policy)
    {
        // This code used to work when nil was passed for object and key. Some code
        // probably relies on that to not crash. Check and handle it explicitly.
        // rdar://problem/44094390
        if (!object && !value) return;
    
        if (object->getIsa()->forbidsAssociatedObjects())
            _objc_fatal("objc_setAssociatedObject called on instance (%p) of class %s which does not allow associated objects", object, object_getClassName(object));
        ...
    

    I guess if (!object && !value) return; should be if (!object) return;

    solution

    check anObject is non nil before invoke objc_setAssociatedObject()

    opened by cchicken 0
  • Preparing a new version (3.1.0) - Upgrading to Xcode 11

    Preparing a new version (3.1.0) - Upgrading to Xcode 11

    After having managed to skip Xcode 10 😅, Xcode 11 is throwing a few warnings when building and using Kiwi.

    I am putting together a new version to support Xcode 11 and while doing that, I will be reviewing any other PR that seems almost ready to go in.

    If you have any changes or PRs that you would like to get into the release, please ping them here and we can work together.

    Thanks!

    Priority Help Wanted 
    opened by ecaselles 4
  • SIGABRT: kiwi crashes at KWProbePoller

    SIGABRT: kiwi crashes at KWProbePoller

    Using kiwi 3.0

    When running the Unit Tests for my app, Xcode crash when framework try to "verifyTheProbe".

    Details backstrace attached, issue producible easily (not 100%).

    screen shot 2018-09-03 at 6 28 33 pm
    opened by satinder-singh-bamrah 0
  • How to test cadisplaylink

    How to test cadisplaylink

    HI, friends

    //
    //  PPSFPSLabel.m
    //  rninit
    //
    //  Created by 魔笛 on 2018/7/30.
    //  Copyright © 2018年 Facebook. All rights reserved.
    //
    
    #import "PPSFPSLabel.h"
    #import "PPSWeakProxy.h"
    
    static const NSInteger kFPSLabelHeight = 30.f;
    
    @interface PPSFPSLabel() {
      NSUInteger _count;
      NSTimeInterval _lastTime;
      UIFont *_font;
      UIFont *_subFont;
    }
    
    @end
    
    @implementation PPSFPSLabel
        
    + (id)fpsLabel {
        UIScreen *mainScreen = [UIScreen mainScreen];
        PPSFPSLabel *fpsLabel = [[PPSFPSLabel alloc] initWithFrame:CGRectMake(0, mainScreen.bounds.size.height - kFPSLabelHeight, 100 , kFPSLabelHeight)];
        return fpsLabel;
    }
        
    - (id)initWithFrame:(CGRect)frame {
        if (self = [super initWithFrame:frame]) {
            self.frame = frame;
            self.layer.cornerRadius = 5;
            self.clipsToBounds = YES;
            self.textAlignment = NSTextAlignmentCenter;
            self.userInteractionEnabled = NO;
            self.backgroundColor = [UIColor colorWithWhite:0.000 alpha:0.700];
            
            _font = [UIFont fontWithName:@"Courier" size:14];
            _subFont = [UIFont fontWithName:@"Courier" size:4];
            [self addTimer];
        }
        
        return self;
    }
        
    - (void)addTimer {
        self.fpsLink = [CADisplayLink displayLinkWithTarget:[PPSWeakProxy proxyWithTarget:self] selector:@selector(tick:)];
        [self.fpsLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    }
    
    - (void)dealloc {
      [self.fpsLink invalidate];
      NSLog(@"timer release");
    }
        
    - (void)tick:(CADisplayLink *)link {
        NSLog(@"tick: %f", _lastTime);
      if (_lastTime == 0) {
        _lastTime = link.timestamp;
        return;
      }
      
      _count++;
      NSTimeInterval delta = link.timestamp - _lastTime;
      if (delta < 1) return;
      _lastTime = link.timestamp;
      float fps = _count / delta;
      _count = 0;
      
      CGFloat progress = fps / 60.0;
      UIColor *color = [UIColor colorWithHue:0.27 * (progress - 0.2) saturation:1 brightness:0.9 alpha:1];
      
      NSString *text1 = [NSString stringWithFormat:@"%d FPS",(int)round(fps)];
      NSLog(@"%@", text1);
      
      
      NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%d FPS",(int)round(fps)]];
      [text addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, text.length - 3)];
      [text addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(text.length - 3, 3)];
      [text addAttribute:NSFontAttributeName value:_font range:NSMakeRange(0, text.length)];
      [text addAttribute:NSFontAttributeName value:_subFont range:NSMakeRange(text.length - 4, 1)];
      self.attributedText = text;
    }
    
    @end
    
    

    How to write unit test for CADisplayLink.

    I write the kiwi is

    describe(@"PPSFPSLabel", ^{
        let(fpsLabel, ^id{
            return [PPSFPSLabel fpsLabel];
        });
        
        it(@"layout on the left-bottom screen", ^{
            UIScreen *mainScreen = [UIScreen mainScreen];
            [[theValue([fpsLabel frame]) should] equal:theValue(CGRectMake(0, mainScreen.bounds.size.height - 30, 100, 30))];
        });
        
        context(@"should add a timer", ^{
            PPSFPSLabel *label = [PPSFPSLabel fpsLabel];
            [[label should] receive:@selector(addTimer)];
            [[label.fpsLink shouldNot] beNil];
        });
        
        it(@"time target", ^{
            PPSFPSLabel *label = [PPSFPSLabel fpsLabel];
            
            while(true) {
                
            }
        });
    });
    

    But the function tick cannot code coverage

    opened by jeremyzj 0
Releases(v3.0.0)
  • v3.0.0(Jan 12, 2018)

    Or "every set of three is complete" (read more)

    • [added] Upgrade Kiwi to Xcode 9.2 🎉 (Huge thanks to @SergeyKuryanov 🙇)
    • [changed] Rename any helper to kw_any. This is a breaking change and you will have to update your tests accordingly.
    • [fixed] Release retained resources held by the verifiers (#667)
    • [fixed] Avoid initializing classes when registering matchers (#649)
    • [added] Support assertions from XCTest, Expecta and Nimble (#671, #636)
    • [changed] Rename -[KWNotificationMatcher bePostedWithObject:andUserInfo:] to-bePostedWithObject:userInfo: (#663). This is a breaking change and you will have to update your tests accordingly.
    • [fixed] Other minor fixes and improvements (#647, #610, #661, #663, #628)

    Thanks @glentregoning, @samkrishna, @mhallendal, @ericbuehl, @yas375, @aspcartman, @tonyarnold, @sharplet and @orta 👏

    Install via CocoaPods or Carthage.

    💝

    Source code(tar.gz)
    Source code(zip)
    Kiwi.framework.zip(3.90 MB)
  • v2.4.0(Aug 13, 2015)

    • [added] Shared Example Groups. This has been a long time coming, but now it's here! To learn more take a look at #600 (thanks @modocache and @ecaselles!)
    • [changed] Kiwi now defines dynamic framework targets for OS X and iOS, and supports installation via Carthage. Building as a static library (in order to target iOS 7.x) is still supported via CocoaPods.
    • [fixed] An issue where Kiwi's tests wouldn't run on OS X 10.9. (#597, thanks @jerrymarino!)
    • [fixed] An issue with FRAMEWORK_SEARCH_PATHS (thanks Shalini Kurian!)

    Install via CocoaPods or Carthage.

    :gift_heart:

    Source code(tar.gz)
    Source code(zip)
    Kiwi.framework.zip(1.79 MB)
Owner
Kiwi
BDD framework for Objective-C
Kiwi
BDD Framework and test runner for Swift projects and playgrounds

Spectre Special Executive for Command-line Test Running and Execution. A behavior-driven development (BDD) framework and test runner for Swift project

Kyle Fuller 392 Jan 1, 2023
BDD-style framework for Swift

Sleipnir Sleipnir is a BDD-style framework for Swift. Sleipnir is highly inspired by Cedar. Also In Norse mythology, Sleipnir is Odin's steed, is the

Railsware 846 Nov 22, 2022
A light-weight TDD / BDD framework for Objective-C & Cocoa

Specta A light-weight TDD / BDD framework for Objective-C. FEATURES An Objective-C RSpec-like BDD DSL Quick and easy set up Built on top of XCTest Exc

Specta / Expecta 2.3k Dec 20, 2022
Basic (simple) App for MacOS with simple functionality

Test Mac App Basic (simple) App for MacOS with simple functionality General Details Build : 1.0 Author Alias : gonewithharshwinds Brand : ADV Descript

Harsh ADV) 1 Dec 25, 2021
PinpointKit is an open-source iOS library in Swift that lets your testers and users send feedback with annotated screenshots using a simple gesture.

PinpointKit is an open-source iOS library in Swift that lets your testers and users send feedback with annotated screenshots using a simple gesture. F

Lickability 1.1k Jan 6, 2023
Tapper - simple app for iOS and iPadOS allows a user to tap a button as many times as possible in 20 seconds

Tapper Table of Contents Description Screenshots Installation Usage Code Contact

Geoff Johnson 0 Mar 12, 2022
This is a simple test app getting data from network to practice a tad bit.

test This is a simple test app getting data from network to practice a tad bit. Start Nothing fancy, no CocoaPods, just clone and run! Architecture Ju

null 1 Oct 9, 2021
A simple and lightweight matching library for XCTest framework.

Match A simple and lightweight matching library for XCTest framework. Getting started Swift Package Manager You can add Match to your project by addin

Michał Tynior 6 Oct 23, 2022
T - A simple testing framework using closures and errors

t Quickly test expectations What is t? t is a simple testing framework using clo

OpenBytes 6 Nov 7, 2022
Kfm-ios-test - Test online for iOS Developer position in Kimia Farma or PT. Buana Varia Komputama

kfm-ios-test Kimia Farma Mobile iOS Test Test online for iOS Developer position

Erwindo Sianipar 3 Feb 23, 2022
Snapshot testing tool for iOS and tvOS

SnapshotTest is a simple view testing tool written completely in Swift to aid with development for Apple platforms. It's like unit testing for views.

Pär Strindevall 44 Sep 29, 2022
ShortWebCore - This iOS library lets you run automations on Web Views.

This iOS library lets you run automations on Web Views. Example (Optional) Declare class conforming to AutomationRunnerDelegate: import S

Emma Cold 19 Dec 26, 2022
Implementing and testing In-App Purchases with StoreKit2 in Xcode 13, Swift 5.5 and iOS 15.

StoreHelper Demo Implementing and testing In-App Purchases with StoreKit2 in Xcode 13, Swift 5.5, iOS 15. See also In-App Purchases with Xcode 12 and

Russell Archer 192 Dec 17, 2022
Swift Package with examples of how to tests iOS apps

GimmeTheCodeTDD A swift package with examples of unit tests in iOS development. Requirements Xcode 13 Content Dependency Injection Constructor Injecti

Dominik Hauser 8 Oct 11, 2021
Library for unifying the approach to network mocking in iOS unit- & UI-tests.

TinkoffMockStrapping Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements Installati

Online financial ecosystem 22 Jan 3, 2023
test ios UnitTest and UITest

github_actions Bundlerの導入 fastlaneやiOSパッケージマネージャであるCocoaPodsはRubyのライブラリ 開発チームで使用するバージョンを揃えるためにBundlerを導入する bundlerのインストール gem install bundler Gemfile

SUGY 0 Nov 3, 2021
Fizz Buzz stub for interviewing iOS candidates

FizzBuzz Write a program that accepts an integer >=1 and returns a list of strings For numbers divisible by 3, return “Fizz” For numbers divisible by

Noel Stieglitz 0 Nov 3, 2021
iOS Test Hasitha

Welcome to the Bidone iOS Coding Test! iOS Create a simple application with the list of orders from viewModel and display them in a list. When a user

null 0 Nov 12, 2021
iOS Test for Openbank by David Moreno Lora

MarvelMobileTest-iOS iOS Test for Openbank by David Moreno Lora Installation Clone the project and install the dependencies using pod install Once th

David Moreno Lora 0 Nov 16, 2021