Skip to content
This repository
Newer
Older
100644 441 lines (305 sloc) 17.199 kb
7063235a » Adam Milligan
2010-05-01 Better README
1 # Cedar
21944d3d » Adam Milligan
2010-05-01 README
2
3 BDD-style testing using Objective-C
4
5
7063235a » Adam Milligan
2010-05-01 Better README
6 ## Usage
21944d3d » Adam Milligan
2010-05-01 README
7
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
8
308d548a » Adam Milligan
2010-11-28 Minor README additions
9 ### Clone from GitHub
10
11 * Don't forget to initialize submodules:
12
13 $ git submodule update --init
14
15
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
16 ### Installation
b6228cba » Adam Milligan & Mike Gehard
2010-06-22 Updated README
17
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
18 * Run the `installCodeSnippetsAndTemplates` script in the Cedar directory.
497f5bf6 » Adam Milligan
2010-06-01 Pending specs
19
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
20 $ ./installCodeSnippetsAndTemplates
21
22
23 ### Non-iOS testing
24
25 * Select your project in Xcode to bring up the project editor.
26 * Click on "Add Target".
27 * Select "Cedar" under the Mac section.
28 * Select either an OSX Cedar Testing Bundle or a OSX Cedar Spec Suite. If you
29 prefer to run a separate target to see your spec results, choose the
30 spec suite. If you prefer to run your specs with Xcode's built-in
31 OCUnit runner, choose the testing bundle. Name this target Specs, or something
32 else suitable.
962363a8 » idoru
2012-07-19 ARC warnings replaced with better explanation
33 * If you're using ARC there are some caveats with using Cedar matchers, see below under "Matchers and ARC".
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
34 * If you created a spec bundle, you must additionally add it to the list of tests
35 for the intended target:
36 * Select the target you want the tests to run against.
37 * Edit the scheme (Cmd-<)
38 * Select Test and then add your spec bundle to the list of tests
39 * You target is now set up and should include an ExampleSpec.mm. To run it:
40 * Spec bundle: Choose Test (Cmd-U) for the target you want to run tests for.
41 * Spec suite: Select your spec suite target and Run/Debug.
42
43
44
45 ### iOS testing
46
47 * Select your project in Xcode to bring up the project editor.
48 * Click on "Add Target".
49 * Select "Cedar" under the iOS section.
50 * Select either an iOS Cedar Testing Bundle or a iOS Cedar Spec Suite. If you
51 prefer to run a separate target to see your spec results, choose the
52 spec suite. If you prefer to run your specs with Xcode's built-in
53 OCUnit runner, choose the testing bundle. Name this target Specs, or something
54 else suitable.
962363a8 » idoru
2012-07-19 ARC warnings replaced with better explanation
55 * If you're using ARC there are some caveats with using Cedar matchers, see below under "Matchers and ARC".
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
56 * If you're creating a spec bundle, you must specify the intended target of your tests
57 when creating it in the Test Target field. Additionally, once you have created your
58 spec bundle target, you must then add it to the list of tests for the test target:
59 * Select the test target.
60 * Edit the scheme (Cmd-<)
61 * Select Test and then add your spec bundle to the list of tests.
62 * Your target is now set up and should include an ExampleSpec.mm. To run it:
63 * Spec bundle: Choose Test (Cmd-U) for the target you want to run tests for.
64 * Spec suite: Select your spec suite target and Run/Debug.
65
66 #### Running iOS tests suites in headless mode
67
68 * By default, when you run an iOS test suite target, the results are displayed in a UITableView
69 in the simulator. If you prefer to have the results output to the console instead, just add
70 the `CEDAR_HEADLESS_SPECS` to the environment of the spec suite target:
71 * Select the spec suite target
72 * Edit the scheme (Cmd-<)
73 * Select Run > Arguments
74 * Add `CEDAR_HEADLESS_SPECS` to the Environment section.
b6228cba » Adam Milligan & Mike Gehard
2010-06-22 Updated README
75
21944d3d » Adam Milligan
2010-05-01 README
76
7063235a » Adam Milligan
2010-05-01 Better README
77 ## Matchers
21944d3d » Adam Milligan
2010-05-01 README
78
9a6a1f0f » Adam Milligan
2011-08-11 Minor README updates
79 Cedar has a new set of matchers that use C++ templates to circumvent type issues that plague other
80 matcher libraries. For example, rather than this (OCHamcrest):
81
82 assertThat(aString, equalTo(@"something"));
83 assertThatInt(anInteger, equalToInt(7));
90d39732 » Luke Metz & Sam Coward
2012-06-08 Made matchers listing in README more exhaustive
84 assertThatInt(anInteger, isNot(equalToInt(9)));
9a6a1f0f » Adam Milligan
2011-08-11 Minor README updates
85 assertThatBool(aBoolean, equalTo(YES));
86
87 you can write the following:
88
89 expect(aString).to(equal(@"something"));
90 expect(anInteger).to(equal(7));
90d39732 » Luke Metz & Sam Coward
2012-06-08 Made matchers listing in README more exhaustive
91 expect(anInteger).to_not(equal(9));
9a6a1f0f » Adam Milligan
2011-08-11 Minor README updates
92 expect(aBoolean).to(equal(YES));
93
94 although you would more likely write the last line as:
95
96 expect(aBoolean).to(be_truthy());
97
a76f4243 » cppforlife
2011-10-20 added more information about matcher library
98 Here is a list of built-in matchers you can use:
99
100 expect(...).to(be_nil());
90d39732 » Luke Metz & Sam Coward
2012-06-08 Made matchers listing in README more exhaustive
101
102 expect(...).to(be_truthy());
103 expect(...).to_not(be_truthy());
104
105 expect(...).to(equal(10));
106 expect(...).to == 10; // shortcut to the above
107 expect(...) == 10; // shortcut to the above
108
109 expect(...).to(be_greater_than(5));
110 expect(...).to > 5; // shortcut to the above
111 expect(...) > 5; // shortcut to the above
112
113 expect(...).to(be_greater_than_or_equal_to(10));
114 expect(...).to(be_gte(10)); // shortcut to the above
115 expect(...).to >= 10; // shortcut to the above
116 expect(...) >= 10; // shortcut to the above
117
118 expect(...).to(be_less_than(11));
119 expect(...).to < 11; // shortcut to the above
120 expect(...) < 11; // shortcut to the above
121
122 expect(...).to(be_less_than_or_equal_to(10));
123 expect(...).to(be_lte(10)); //shortcut to the above
124 expect(...).to <= 10; // shortcut to the above
125 expect(...) <= 10; // shortcut to the above
126
a76f4243 » cppforlife
2011-10-20 added more information about matcher library
127 expect(...).to(be_close_to(5)); // default within(.01)
128 expect(...).to(be_close_to(5).within(.02));
90d39732 » Luke Metz & Sam Coward
2012-06-08 Made matchers listing in README more exhaustive
129
a76f4243 » cppforlife
2011-10-20 added more information about matcher library
130 expect(...).to(be_instance_of([NSObject class]));
90d39732 » Luke Metz & Sam Coward
2012-06-08 Made matchers listing in README more exhaustive
131 expect(...).to(be_instance_of([NSObject class]).or_any_subclass());
132
a76f4243 » cppforlife
2011-10-20 added more information about matcher library
133 expect(...).to(be_same_instance_as(object));
90d39732 » Luke Metz & Sam Coward
2012-06-08 Made matchers listing in README more exhaustive
134
a76f4243 » cppforlife
2011-10-20 added more information about matcher library
135 expect(...).to(contain(@"something"));
136 expect(...).to(be_empty());
137
03c1b0f9 » cppforlife
2012-10-02 mention xcode plugin for running focused specs
138 expect(^{ ... }).to(raise_exception([NSInternalInconsistencyException class]));
90d39732 » Luke Metz & Sam Coward
2012-06-08 Made matchers listing in README more exhaustive
139
feebfc80 » Adam Milligan
2011-10-28 Added more explicit information about using Cedar matchers to the
140 These matchers use C++ templates for type deduction. You'll need to do two things to use them:
21944d3d » Adam Milligan
2010-05-01 README
141
feebfc80 » Adam Milligan
2011-10-28 Added more explicit information about using Cedar matchers to the
142 * Change the file extension for each of your spec files from .m to .mm (this will tell the
8493b2ed » cppforlife
2011-11-02 mention should matcher syntax
143 compiler that the file contains C++ code).
feebfc80 » Adam Milligan
2011-10-28 Added more explicit information about using Cedar matchers to the
144 * Add the following line to the top of your spec files, after the file includes:
145
8493b2ed » cppforlife
2011-11-02 mention should matcher syntax
146 using namespace Cedar::Matchers;
feebfc80 » Adam Milligan
2011-10-28 Added more explicit information about using Cedar matchers to the
147
a76f4243 » cppforlife
2011-10-20 added more information about matcher library
148 It's also theoretically very easy to add your own matchers without modifying the
feebfc80 » Adam Milligan
2011-10-28 Added more explicit information about using Cedar matchers to the
149 Cedar library (more on this later).
150
151 These matchers will break Apple's GCC compiler, and versions 2.0 and older of the LLVM compiler
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
152 (this translates to any compiler shipped with a version of Xcode before 4.1). Fortunately,
feebfc80 » Adam Milligan
2011-10-28 Added more explicit information about using Cedar matchers to the
153 LLVM 2.1 fixes the issues.
3b2657fc » Adam Milligan
2010-06-18 README updates.
154
a76f4243 » cppforlife
2011-10-20 added more information about matcher library
155 Note: If you decide to use another matcher library that uses `expect(...)` to
156 build its expectations (e.g. [Expecta](http://github.com/petejkim/expecta)) you
157 will need to add `#define CEDAR_MATCHERS_COMPATIBILITY_MODE` before importing
158 SpecHelper.h. That will prevent Cedar from defining a macro that overrides that
159 library's expect function.
160
8493b2ed » cppforlife
2011-11-02 mention should matcher syntax
161 Note: If you prefer RSpec's `should` syntax you can write your expectations as follows:
162
163 1 + 2 should equal(3);
164 glass should_not be_empty();
165
962363a8 » idoru
2012-07-19 ARC warnings replaced with better explanation
166 ### Matchers and ARC
167
168 A bug in the current Xcode compiler currently prevents the type C++ deduction from actually working if you have automatic reference counting enabled. At this time, this leaves you with a few alternatives:
169
fdf09892 » idoru
2012-07-19 Added note on detecting when ARC is on by accident
170 1. Disable ARC for your spec files, but continue to use it for your application code. You can do this by selecting spec files in the target's "Compile Sources" build phase and adding the compiler flag `-fno-objc-arc`. You can help ensure that you do this by creating a `SpecHelper.h` file in your spec target that you `#import` into every spec which contains this guard:
171
172 #if __has_feature(objc_arc)
173 #error ARC must be disabled for specs!
174 #endif
962363a8 » idoru
2012-07-19 ARC warnings replaced with better explanation
175
176 2. Use another matcher library like [Expecta](http://github.com/petejkim/expecta). Just remove the following line from your spec files:
177
178
179 using namespace Cedar::Matchers;
180
3b2657fc » Adam Milligan
2010-06-18 README updates.
181
af2871d7 » Adam Milligan
2010-07-01 Added shared example group bit to README.
182 ## Shared example groups
183
184 Cedar supports shared example groups; you can declare them in one of two ways:
185 either inline with your spec declarations, or separately.
186
187 Declaring shared examples inline with your specs is the simplest:
188
189 SPEC_BEGIN(FooSpecs)
190
191 sharedExamplesFor(@"a similarly-behaving thing", ^(NSDictionary *context) {
192 it(@"should do something common", ^{
193 ...
194 });
195 });
196
197 describe(@"Something that shares behavior", ^{
f70dd61f » Adam Milligan
2010-10-03 Shared example groups now use a shared context dictionary, stored on …
198 itShouldBehaveLike(@"a similarly-behaving thing");
af2871d7 » Adam Milligan
2010-07-01 Added shared example group bit to README.
199 });
200
201 describe(@"Something else that shares behavior", ^{
f70dd61f » Adam Milligan
2010-10-03 Shared example groups now use a shared context dictionary, stored on …
202 itShouldBehaveLike(@"a similarly-behaving thing");
af2871d7 » Adam Milligan
2010-07-01 Added shared example group bit to README.
203 });
204
205 SPEC_END
206
207 Sometimes you'll want to put shared examples in a separate file so you can use
208 them in several specs across different files. You can do this using macros
209 specifically for declaring shared example groups:
210
211 SHARED_EXAMPLE_GROUPS_BEGIN(GloballyCommon)
212
213 sharedExamplesFor(@"a thing with globally common behavior", ^(NSDictionary *context) {
214 it(@"should do something really common", ^{
215 ...
216 });
217 });
218
219 SHARED_EXAMPLE_GROUPS_END
220
221 The context dictionary allows you to pass example-specific state into the shared
f70dd61f » Adam Milligan
2010-10-03 Shared example groups now use a shared context dictionary, stored on …
222 example group. You can populate the context dictionary available on the SpecHelper
223 object, and each shared example group will receive it:
224
225 sharedExamplesFor(@"a red thing", ^(NSDictionary *context) {
226 it(@"should be red", ^{
227 Thing *thing = [context objectForKey:@"thing"];
9a6a1f0f » Adam Milligan
2011-08-11 Minor README updates
228 expect(thing.color).to(equal(red));
f70dd61f » Adam Milligan
2010-10-03 Shared example groups now use a shared context dictionary, stored on …
229 });
230 });
231
232 describe(@"A fire truck", ^{
233 beforeEach(^{
234 [[SpecHelper specHelper].sharedExampleContext setObject:[FireTruck fireTruck] forKey:@"thing"];
235 });
236 itShouldBehaveLike(@"a red thing");
237 });
238
239 describe(@"An apple", ^{
240 beforeEach(^{
241 [[SpecHelper specHelper].sharedExampleContext setObject:[Apple apple] forKey:@"thing"];
242 });
243 itShouldBehaveLike(@"a red thing");
244 });
245
9a6a1f0f » Adam Milligan
2011-08-11 Minor README updates
246
247 ## Global beforeEach and afterEach
248
249 In many cases you have some housekeeping you'd like to take care of before every spec in your entire
250 suite. For example, loading fixtures or resetting a global variable. Cedar will look for the
251 +beforeEach and +afterEach class methods on every class it loads; you can add this class method
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
252 onto any class you compile into your specs and Cedar will run it. This allows spec libraries to
253 provide global +beforeEach and +afterEach methods specific to their own functionality, and they
9a6a1f0f » Adam Milligan
2011-08-11 Minor README updates
254 will run automatically.
255
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
256 If you want to run your own code before or after every spec, simply declare a class and implement
9a6a1f0f » Adam Milligan
2011-08-11 Minor README updates
257 the +beforeEach and/or +afterEach methods.
af2871d7 » Adam Milligan
2010-07-01 Added shared example group bit to README.
258
259
3b2657fc » Adam Milligan
2010-06-18 README updates.
260 ## Mocks and stubs
261
6bf6671d » Adam Milligan & John Barker
2012-07-18 New stub_method syntax
262 Doubles. Got 'em.
263
962363a8 » idoru
2012-07-19 ARC warnings replaced with better explanation
264 spy_on(someInstance);
265 id<CedarDouble> fake = fake_for(someClass);
266 id<CedarDouble> anotherFake = fake_for(someProtocol);
267 id<CedarDouble> niceFake = nice_fake_for(someClass);
268 id<CedarDouble> anotherNiceFake = nice_fake_for(someProtocol);
6bf6671d » Adam Milligan & John Barker
2012-07-18 New stub_method syntax
269
270 Method stubbing:
271
962363a8 » idoru
2012-07-19 ARC warnings replaced with better explanation
272 fake stub_method("selector").with(x);
273 fake stub_method("selector").with(x).and_with(y);
274 fake stub_method("selector").and_return(z);
275 fake stub_method("selector").with(x).and_return(z);
276 fake stub_method("selector").and_raise_exception();
277 fake stub_method("selector").and_raise_exception([NSException]);
278 fake stub_method("selector").with(anything);
21944d3d » Adam Milligan
2010-05-01 README
279
497f5bf6 » Adam Milligan
2010-06-01 Pending specs
280 ## Pending specs
281
282 If you'd like to specify but not implement an example you can do so like this:
283
284 it(@"should do something eventually", PENDING);
285
286 The spec runner will not try to run this example, but report it as pending. The
287 PENDING keyword simply references a nil block pointer; if you prefer you can
288 explicitly pass nil as the second parameter. The parameter is necessary because
289 C, and thus Objective-C, doesn't support function parameter overloading or
290 default parameters.
291
8efaf399 » cppforlife
2011-10-12 updated README to mention focused specs
292
293 ## Focused specs
294
295 Sometimes when debugging or developing a new feature it is useful to run only a
03c1b0f9 » cppforlife
2012-10-02 mention xcode plugin for running focused specs
296 subset of your tests. That can be achieved by marking any number of examples
297 with an 'f'. You can use `fit`, `fdescribe` and `fcontext` like this:
8efaf399 » cppforlife
2011-10-12 updated README to mention focused specs
298
299 fit(@"should do something eventually", ^{
300 // ...
301 });
302
303 If your test suite has at least one focused example, all focused examples will
304 run and non-focused examples will be skipped and reported as such (shown as '>'
305 in default reporter output).
306
307 It might not be immediately obvious why the test runner always returns a
308 non-zero exit code when a test suite contains at least one focused example. That
309 was done to make CI fail if someone accidently forgets to unfocus focused
310 examples before commiting and pushing.
311
03c1b0f9 » cppforlife
2012-10-02 mention xcode plugin for running focused specs
312 Note: For improved Xcode integration see
313 [CedarShortcuts](https://github.com/cppforlife/CedarShortcuts), an Xcode plugin
314 that provides keyboard shortcuts for focusing on specs under editor cursor.
315
8efaf399 » cppforlife
2011-10-12 updated README to mention focused specs
316
2ad4520d » cppforlife
2011-10-13 updated README to mention custom reporters
317 ## Reporters
318
319 When running in headless mode by default Cedar uses `CDRDefaultReporter` to
320 output test results. Here is how it looks:
321
322 .P..P..
323
324 PENDING CDRExample hasChildren should return false by default
325 PENDING CDRExample hasFocusedExamples should return false by default
326
327 Finished in 0.0166 seconds
328 7 examples, 0 failures, 2 pending
329
330 Most of the time above output is exactly what you want to see; however, in some
331 cases you might actually want to see full names of running examples. You can get
332 more detailed output by setting `CEDAR_REPORTER_OPTS` env variable to `nested`.
333 Here is how it looks after that:
334
335 CDRExample
336 hasChildren
337 . should return false
338 isFocused
339 P should return false by default
340 . should return false when example is not focused
341 . should return true when example is focused
342 hasFocusedExamples
343 P should return false by default
344 . should return false when example is not focused
345 . should return true when example is focused
346
347 PENDING CDRExample hasChildren should return false by default
348 PENDING CDRExample hasFocusedExamples should return false by default
349
350 Finished in 0.0173 seconds
351 7 examples, 0 failures, 2 pending
352
353 If the default reporter for some reason does not fit your needs you can always
354 write a custom reporter. `CDRTeamCityReporter` is one such example. It was
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
355 written to output test results in a way that TeamCity CI server can understand.
2ad4520d » cppforlife
2011-10-13 updated README to mention custom reporters
356 You can tell Cedar which reporter to use by setting `CEDAR_REPORTER_CLASS` env
357 variable to your custom reporter class name.
358
32c3054b » onsi
2012-09-15 Setting CEDAR_REPORT_SLOW_TESTS reports slow tests
359 ### Finding Slow-Running Tests
360
7463a0d7 » cppforlife
2012-10-06 mention CEDAR_REPORT_FAILURES_IMMEDIATELY
361 Set the `CEDAR_REPORT_SLOW_TESTS` environment vairables to have Cedar identify
362 and prints out the slowest `N` (10 by default) tests in your suite, and the
363 slowest `N` top-level groups. These top-level groups typically have a one to one
364 correspondence with your spec files allowing you to easily identify the slowest
365 running slow files. You can change `N` by setting the `CEDAR_TOP_N_SLOW_TESTS`
366 env variable.
367
368 ### Faster Failure Reporting
369
370 Set the `CEDAR_REPORT_FAILURES_IMMEDIATELY` environment variable to have Cedar
371 print failure details before finishing running all tests.
32c3054b » onsi
2012-09-15 Setting CEDAR_REPORT_SLOW_TESTS reports slow tests
372
9f25d38b » i-taptera
2011-11-27 Added CDRJUnitXMLReporter to generate JUnit compatible XML for CI bui…
373 ### JUnit XML Reporting
374
375 The `CDRJUnitXMLReporter` can be used to generate (simple) JUnit compatible
376 XML that can be read by build servers such as Jenkins. To use this reporter,
377 you can take advantage of the ability to specify multiple reporters like so:
378
379 CEDAR_REPORTER_CLASS=CDRColorizedReporter,CDRJUnitXMLReporter
380
381 By default, the XML file will be written to `build/TEST-Cedar.xml` but this
382 path can be overridden with the `CEDAR_JUNIT_XML_FILE` env variable.
383
2ad4520d » cppforlife
2011-10-13 updated README to mention custom reporters
384
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
385 ## Code Snippets
e1caaed4 » cppforlife
2011-10-28 added instructions on how to use Cedar with OCUnit
386
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
387 Code snippets are installed as part of Cedar. These are installed into
388 `~/Library/Developer/XCode/UserData/CodeSnippets`
e1caaed4 » cppforlife
2011-10-28 added instructions on how to use Cedar with OCUnit
389
390
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
391 ## Command line automation
e1caaed4 » cppforlife
2011-10-28 added instructions on how to use Cedar with OCUnit
392
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
393 The Rakefile contains useful rake tasks that let you run cedar specs from the
394 command line. The `ocunit:logic` and `ocunit:application` tasks demonstrate how
395 you can run OCUnit style test bundles. The `specs` and `uispecs` tasks show how
396 you can run cedar test suites.
e1caaed4 » cppforlife
2011-10-28 added instructions on how to use Cedar with OCUnit
397
398
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
399 ## Troubleshooting
e1caaed4 » cppforlife
2011-10-28 added instructions on how to use Cedar with OCUnit
400
5c8f035c » idoru
2012-07-08 Add troubleshooting for stripped symbol scenario
401 ### Linker problem ld: file not found
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
402 Example failure:
e1caaed4 » cppforlife
2011-10-28 added instructions on how to use Cedar with OCUnit
403
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
404 ld: file not found: <path to build dir>/Products/<Configuration>-<device>/<target name>.app/<target name>
405 clang: error: linker command failed with exit code 1 (use -v to see invocation)
f44f3a94 » Adam Milligan
2010-06-02 Added Cedar-specific macros for Xcode; removed useless pch file.
406
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
407 * This error occurs when there is an incorrect target name used.
408 * To fix this, Update the `Bundle Loader` setting in build settings to
409 `$(BUILT_PRODUCTS_DIR)/<target name>.app/<target name>`
410 Ensuring that your new target name is the correct.
f44f3a94 » Adam Milligan
2010-06-02 Added Cedar-specific macros for Xcode; removed useless pch file.
411
5c8f035c » idoru
2012-07-08 Add troubleshooting for stripped symbol scenario
412 ### Linker problem ld: symbol(s) not found
413 Example failure:
414
415 Undefined symbols for architecture i386:
416 "_OBJC_CLASS_$_SomeClassFromYourApp", referenced from:
417 objc-class-ref in SomeClassFromYourAppSpec.o
418 (maybe you meant: _OBJC_CLASS_$__OBJC_CLASS_$_SomeClassFromYourApp)
419 ld: symbol(s) not found for architecture i386
420
421 This error can happen when you have a spec bundle which is run against code built with "Strip Debug Symbols During Copy" set to Yes.
422
423 You should ensure that you're running your tests against code built with this configuration setting set to No. This should be the default if you're building with the Debug configuration.
424
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
425 ### No matching function to call
426 Example failure:
f44f3a94 » Adam Milligan
2010-06-02 Added Cedar-specific macros for Xcode; removed useless pch file.
427
1d46a3df » Luke Metz & Sam Coward
2012-06-08 Updated README for new project templates.
428 error: no matching function for call to 'CDR_expect'
429 note: candidate template ignored: substitution failure [with T = SOME_TYPE]
f44f3a94 » Adam Milligan
2010-06-02 Added Cedar-specific macros for Xcode; removed useless pch file.
430
962363a8 » idoru
2012-07-19 ARC warnings replaced with better explanation
431 * This is caused by a C++ compiler bug in Xcode when ARC is enabled and you use a Cedar matcher. See the above section "Matchers and ARC" on how to deal with this.
3b2657fc » Adam Milligan
2010-06-18 README updates.
432
21944d3d » Adam Milligan
2010-05-01 README
433
3b2657fc » Adam Milligan
2010-06-18 README updates.
434 ## Contributions and feedback
21944d3d » Adam Milligan
2010-05-01 README
435
07dd7fdc » Adam Milligan & Mike Gehard
2010-06-22 Updated links in README
436 Welcomed! Feel free to join and contribute to the public Tracker project [here](http://www.pivotaltracker.com/projects/77775).
21944d3d » Adam Milligan
2010-05-01 README
437
07dd7fdc » Adam Milligan & Mike Gehard
2010-06-22 Updated links in README
438 The [public Google group](http://groups.google.com/group/cedar-discuss) for Cedar is cedar-discuss@googlegroups.com.
439 Or, you can follow the growth of Cedar on Twitter: [@cedarbdd](http://twitter.com/cedarbdd).
3b2657fc » Adam Milligan
2010-06-18 README updates.
440
78249b95 » Adam Milligan
2011-04-20 Code snippets for Xcode 4.
441 Copyright (c) 2011 Pivotal Labs. This software is licensed under the MIT License.
Something went wrong with that request. Please try again.