Inspired by this issue on objc.io I decided to try out BDD on my new project. Here is my problem: I want to test that MYCredentialStorage somehow persists credentials I ask it to store, namely that next time app is launched I would get the very same credential. MYCredentialStorage uses keychain, so I could mock it and verify that SecItemAdd or SecItemUpdate functions are called, but I am not supposed to test (or know of) MYCredentialStorage’s private methods, right?
I’m sure I’m not the only one faced this problem, so I’m asking for your advice since I’m very new to BDD.
Thank you in advance.
Advice on BDD for iOS needed
158 Views Asked by dariaa At
1
There are 1 best solutions below
Related Questions in IOS
- Overlapping UICollectionView in storyboard
- Cannot pod spec lint because of undeclared type errors
- Is the transactionReceipt data present in dataWithContentsOfURL?
- UIWebView Screen Fitting Issue
- ZXingObjC encoding issues
- iOS: None of the valid provisioning profiles allowed the specific entitlements
- How to hide "Now playing url" in control center
- CloudKit: Preventing Duplicate Records
- Slow performance on ipad erasing image
- Swift code with multiple NSDateFormatter - optimization
- iOS 8.3 Safari crashes on input type=file
- TTTTimeIntervalFormatter always returns strings in English
- How do I add multiple in app purchases in Swift Spritekit?
- Setup code for xibs in iOS. -awakFromNb:
- iOS Voice Over only reads out the title of any alert views
Related Questions in UNIT-TESTING
- How to write tests for classes with inheritance
- PHPunit call magic methods
- Convert IEnumerable to IObservable with variable Period
- How to a run specific code before & after each unit test in Python
- Unit testing a class A that derives from an abstract class B
- Is there another way to unit test business logic in mvc
- Some of my tests show prepended with junit.framework
- Selenium Driver Service not found exception
- Can not convert from Class<PowerMockRunner> to Class<? extends Runner>
- AngularJS Unit Testing - multiple mocks and providers
- How to use Sinon.js FakeXMLHttpRequest with superagent?
- Get Mock with AutoMock.Create<>()
- Mock service that takes unitOfWork in constructor
- Cleanest method for creating a pytest test fixture that takes in dynamic text data
- g++ 5.1.0 not building project, clang shows unknown error
Related Questions in BDD
- Behat doesn't load extensions?
- How can i keep my database clean between my scenarios?
- How do I test array element types using BDD Javascript?
- Is there a way to create a custom cucumber formatter that prints the Given, When and Then steps
- Behat / Mink error Snippets for the following steps not generated
- Unit Test Adapter threw exception: Object must implement IConvertible..in BDD specflow framework
- Instantiating PageObject instances from within Cucumber StepDefinitions
- SpecFlow Ambiguity in bindings
- Socket.IO server not receiving message from client
- In “Given-When-Then” style BDD tests, is it OK to have multiple “When”s conjoined with an “And”?
- How can we validate tabular data in robot framework?
- Simple Spec That Validates_Associated
- Providing Examples in more than 1 row Specflow
- Cucumber Testing, Counting Page Elements
- .settings not working 'mocha' in Microsoft Visual Studio Code on Windows
Related Questions in XCTEST
- Can we set performance test case baseline programmatically in xcode?
- XCTest UI Record and Play - Simulator not updating UI
- Can't import main swift classes into test target?
- Using Xcode7's UI tests to create app screenshots for the App Store
- Running tests after an asynchronous setUp method is finished
- XCTest exception when using keyValueObservingExpectationForObject:keyPath:handler:
- XCTestAssertNil crash due to "nil" parameter
- How to use XCTest framework to test REST based native iOS appliction?
- MKAnnotation via XCTest UI Testing
- How to test Xcode Source Editor Extension?
- Button in UITableView hierarchy UITest
- How can I extend Array so equality check of arrays of optionals are possible?
- Swift blank Xcode Test doesn't compile but app does
- How do I unit test NSFetchedResultsControllerDelegate (controllerWillChangeContent and controllerDidChangeContent) using Swift
- Including Asset Catalogue in Test Targets
Related Questions in OCMOCK
- OCMVerifyAllWithDelay not working
- How to test an object's methods in an viewcontroller class?
- Cannot stub a method ([NSData initWithBase64EncodedString])
- How to get a list of mocked object with OCMock
- Testing void methods using OCMock in iOS
- ios - How to mock a method with pmkpromise as the return type
- OCMock test code with intermediate variable
- How to write unit test for testing view controller?
- OCMStub sends OCMConstraint instance to to real method upon stub creation
- OCMock: Setting expectations on properties
- Advice on BDD for iOS needed
- How to start with OCMock and check if method was invoked
- How test mapping in RestKit method postObject:path:parameters:success:failure: with OCMock
- Unit Test CLLocationManager implementation
- OCMock Unrecognized Selector for mocked object
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
From the comments
Michał Ciuba wrote:
Take a look at another article from the same objc.io issue - dependency injection: objc.io/issue-15/dependency-injection.html. Basically you can inject a mock of keychain into MYCredentialStorage (but maybe you'll need to create a wrapper for SecItem* methods).
Ben Flynn wrote:
I agree with @MichałCiuba - there's no generic way to express that an item will persist between executions of your app. If you're going the DI route, I'd do what he says. If you aren't doing DI, I wouldn't be shy about mocking the keychain storage or your private methods. I'd be explicit in the naming of the test to express exactly what the expectations are.