forked from assertj/assertj
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
249 lines (189 loc) · 22.4 KB
/
Copy pathindex.html
File metadata and controls
249 lines (189 loc) · 22.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<title>Assertj-core by joel-costigliola</title>
<link rel="stylesheet" href="stylesheets/styles.css">
<link rel="stylesheet" href="stylesheets/pygment_trac.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="javascripts/respond.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!--[if lt IE 8]>
<link rel="stylesheet" href="stylesheets/ie.css">
<![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
</head>
<body>
<div id="header">
<nav>
<li class="fork"><a href="https://github.com/joel-costigliola/assertj-core">View On GitHub</a></li>
<li class="downloads"><a href="https://github.com/joel-costigliola/assertj-core/zipball/master">ZIP</a></li>
<li class="downloads"><a href="https://github.com/joel-costigliola/assertj-core/tarball/master">TAR</a></li>
<li class="title">DOWNLOADS</li>
</nav>
</div><!-- end header -->
<div class="wrapper">
<section>
<div id="title">
<h1>Assertj-core</h1>
<p>AssertJ is a library of assertions similar to fest-assert but providing a richer set of assertions.</p>
<hr>
<span class="credits left">Project maintained by <a href="https://github.com/joel-costigliola">joel-costigliola</a></span>
<span class="credits right">Hosted on GitHub Pages — Theme by <a href="https://twitter.com/michigangraham">mattgraham</a></span>
</div>
<h1>
<a name="assertj---a-rich-assertions-library-for-java" class="anchor" href="#assertj---a-rich-assertions-library-for-java"><span class="octicon octicon-link"></span></a>AssertJ - a rich assertions library for java</h1>
<p>AssertJ provides a rich and intuitive set of strongly typed assertions to use for unit testing (either with JUnit or TestNG). </p>
<ul>
<li><a href="#goals">AssertJ's goals</a></li>
<li><a href="#news">Latest News</a></li>
<li><a href="#quickstart">Quick start</a></li>
<li><a href="#custom%20types-assertions">Assertions for your own custom types</a></li>
<li><a href="#junit-to-assertj-assertions">Replacing JUnit assertions by AssertJ Assertions</a></li>
<li><a href="#fest-assertj">Why having forked Fest Assert ?</a></li>
<li><a href="#migrating-from-fest">Migrating from Fest assertions</a></li>
<li><a href="#doc">Documentation & Mailing list</a></li>
<li><a href="#contributing">Contributing</a></li>
</ul><p>You can ask questions and make suggestions on <a href="https://groups.google.com/forum/?fromgroups=#!forum/assertj">AssertJ google group</a>.<br>
To directly jump to a more complete documentation please go to <strong><a href="https://github.com/joel-costigliola/AssertJ-core/wiki">AssertJ wiki</a></strong>.</p>
<h2>
<a name="assertjs-goals" class="anchor" href="#assertjs-goals"><span class="octicon octicon-link"></span></a><a name="goals"></a>AssertJ's goals</h2>
<p>AssertJ's ambition is to provide a rich and intuitive set of strongly typed assertions to use for unit testing.<br>
The idea is that, when writing unit tests, we should have at our disposal assertions specific to the type of the objects we are checking : you are checking a String ? use String specific assertions ! </p>
<p>AssertJ is composed of several modules :</p>
<ul>
<li>A core module (this one) to provide assertions for JDK types (String, Collections, File, Map ...). </li>
<li>A <strong><a href="https://github.com/joel-costigliola/assertj-guava#readme">Guava module</a></strong> to provide assertions for Guava types (Multimap,Optional, ...).</li>
<li>A <strong><a href="https://github.com/joel-costigliola/assertj-joda-time#readme">Joda Time module</a></strong> to provide assertions for Joda Time types (DateTime, LocalDateTime).</li>
</ul><p>Assertion missing ? Please <a href="https://github.com/joel-costigliola/assertj-core/issues">fill a ticket</a> ! </p>
<p>AssertJ's assertions are super easy to write: just type <strong><code>assertThat</code></strong> followed the actual value and a dot, and any Java
IDE will show you all the assertions available for the type of the object to verify. No more confusion about the
order of the "expected" and "actual" values. Our assertions are very readable as well: they read very close to plain
English, making it easier for non-technical people to read test code.<br>
A lot of efforts have to provide intuitive error messages showing as clearly as possible what the problem is.</p>
<p>Note that AssertJ requires at least Java 6.</p>
<p>For more details check <strong><a href="https://github.com/joel-costigliola/assertj-core/wiki/">AssertJ wiki</a></strong>.</p>
<h2>
<a name="latest-news" class="anchor" href="#latest-news"><span class="octicon octicon-link"></span></a><a name="news"></a>Latest News</h2>
<p><strong>2013-03-28 : AssertJ quickie presentation at Devoxx France !</strong></p>
<p><strong>2013-03-26 - AssertJ train releases :</strong> </p>
<ul>
<li><strong>assertj-core 1.0.0</strong></li>
<li><strong>assertj-guava 1.0.0</strong></li>
<li><strong>assertj-joda-time 1.0.0</strong></li>
<li><strong>assertj-assertions-generator 1.0.0</strong></li>
<li><strong>assertj-assertions-generator-maven-plugin 1.0.0</strong></li>
</ul><p>See <a href="https://github.com/joel-costigliola/assertj-core/wiki/New-and-noteworthy"><strong>what's new</strong></a> in assertj-core compared to Fest. </p>
<h2>
<a name="quickstart" class="anchor" href="#quickstart"><span class="octicon octicon-link"></span></a><a name="quickstart"></a>Quickstart</h2>
<p>It is easy to start using AssertJ, it should take you less than a minute !</p>
<h4>
<a name="1---get-assertj-core" class="anchor" href="#1---get-assertj-core"><span class="octicon octicon-link"></span></a>1 - Get AssertJ core</h4>
<p>AssertJ core is available in Maven central repository.</p>
<div class="highlight highlight-xml"><pre><span class="nt"><dependency></span>
<span class="nt"><groupId></span>org.assertj<span class="nt"></groupId></span>
<span class="nt"><artifactId></span>assertj-core<span class="nt"></artifactId></span>
<span class="nt"><version></span>1.0.0<span class="nt"></version></span>
<span class="nt"><scope></span>test<span class="nt"></scope></span>
<span class="nt"></dependency></span>
</pre></div>
<h3>
<a name="2---add-assertions-static-import" class="anchor" href="#2---add-assertions-static-import"><span class="octicon octicon-link"></span></a>2 - Add Assertions.* static import</h3>
<div class="highlight highlight-java"><pre><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.*;</span>
</pre></div>
<p>or the complete list</p>
<div class="highlight highlight-java"><pre><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">assertThat</span><span class="o">;</span> <span class="c1">// main one</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">atIndex</span><span class="o">;</span> <span class="c1">// for List assertions</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">entry</span><span class="o">;</span> <span class="c1">// for Map assertions</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">extractProperty</span><span class="o">;</span> <span class="c1">// for Iterable/Array assertions</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">fail</span><span class="o">;</span> <span class="c1">// use when making exception tests</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">failBecauseExceptionWasNotThrown</span><span class="o">;</span> <span class="c1">// idem</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">filter</span><span class="o">;</span> <span class="c1">// for Iterable/Array assertions</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">offset</span><span class="o">;</span> <span class="c1">// for floating number assertions</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">anyOf</span><span class="o">;</span> <span class="c1">// use with Condition</span>
<span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.</span><span class="na">contentOf</span><span class="o">;</span> <span class="c1">// use with File assertions</span>
</pre></div>
<p>You can even configure your IDE, so that when you type <code>asse</code> and trigger code completion, it will suggest <code>assertThat</code>.</p>
<h3>
<a name="3---type-assertthat-followed-by-the-actual-value-and-a-dot-" class="anchor" href="#3---type-assertthat-followed-by-the-actual-value-and-a-dot-"><span class="octicon octicon-link"></span></a>3 - Type <strong>assertThat</strong> followed by the actual value and a dot ...</h3>
<p>... and any Java IDE code completion will show you all the assertions available.</p>
<p>That's all !</p>
<h3>
<a name="some-assertions-examples" class="anchor" href="#some-assertions-examples"><span class="octicon octicon-link"></span></a>Some assertions examples</h3>
<div class="highlight highlight-java"><pre><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span><span class="o">.*;</span>
<span class="c1">// some of the assertions available for all types</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">yoda</span><span class="o">).</span><span class="na">isInstanceOf</span><span class="o">(</span><span class="n">Jedi</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">frodo</span><span class="o">.</span><span class="na">getName</span><span class="o">()).</span><span class="na">isEqualTo</span><span class="o">(</span><span class="s">"Frodo"</span><span class="o">);</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">frodo</span><span class="o">).</span><span class="na">isNotEqualTo</span><span class="o">(</span><span class="n">sauron</span><span class="o">);</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">frodo</span><span class="o">).</span><span class="na">isIn</span><span class="o">(</span><span class="n">fellowshipOfTheRing</span><span class="o">);</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">sauron</span><span class="o">).</span><span class="na">isNotIn</span><span class="o">(</span><span class="n">fellowshipOfTheRing</span><span class="o">);</span>
<span class="c1">// String specific assertions</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">frodo</span><span class="o">.</span><span class="na">getName</span><span class="o">()).</span><span class="na">startsWith</span><span class="o">(</span><span class="s">"Fro"</span><span class="o">).</span><span class="na">endsWith</span><span class="o">(</span><span class="s">"do"</span><span class="o">)</span>
<span class="o">.</span><span class="na">isEqualToIgnoringCase</span><span class="o">(</span><span class="s">"frodo"</span><span class="o">);</span>
<span class="c1">// collection specific assertions</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">fellowshipOfTheRing</span><span class="o">).</span><span class="na">hasSize</span><span class="o">(</span><span class="mi">9</span><span class="o">)</span>
<span class="o">.</span><span class="na">contains</span><span class="o">(</span><span class="n">frodo</span><span class="o">,</span> <span class="n">sam</span><span class="o">)</span>
<span class="o">.</span><span class="na">doesNotContain</span><span class="o">(</span><span class="n">sauron</span><span class="o">);</span>
<span class="c1">// Exception/Throwable specific assertions</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">fellowshipOfTheRing</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">9</span><span class="o">);</span>
<span class="c1">// argggl ! fellowshipOfTheRing size is 9 and get(9) asks for the 10th element !</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">e</span><span class="o">).</span><span class="na">isInstanceOf</span><span class="o">(</span><span class="n">IndexOutOfBoundsException</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
<span class="o">.</span><span class="na">hasMessage</span><span class="o">(</span><span class="s">"Index: 9, Size: 9"</span><span class="o">)</span>
<span class="o">.</span><span class="na">hasNoCause</span><span class="o">();</span>
<span class="o">}</span>
<span class="c1">// Map specific assertions, ringBearers is a Map of Ring -> TolkienCharacter</span>
<span class="n">assertThat</span><span class="o">(</span><span class="n">ringBearers</span><span class="o">).</span><span class="na">hasSize</span><span class="o">(</span><span class="mi">4</span><span class="o">)</span>
<span class="o">.</span><span class="na">includes</span><span class="o">(</span><span class="n">entry</span><span class="o">(</span><span class="n">Ring</span><span class="o">.</span><span class="na">oneRing</span><span class="o">,</span> <span class="n">frodo</span><span class="o">),</span> <span class="n">entry</span><span class="o">(</span><span class="n">Ring</span><span class="o">.</span><span class="na">nenya</span><span class="o">,</span> <span class="n">galadriel</span><span class="o">))</span>
<span class="o">.</span><span class="na">excludes</span><span class="o">(</span><span class="n">entry</span><span class="o">(</span><span class="n">Ring</span><span class="o">.</span><span class="na">oneRing</span><span class="o">,</span> <span class="n">aragorn</span><span class="o">));</span>
</pre></div>
<h2>
<a name="assertions-for-your-own-custom-types" class="anchor" href="#assertions-for-your-own-custom-types"><span class="octicon octicon-link"></span></a><a name="custom%20types-assertions"></a>Assertions for your own custom types</h2>
<p>Having assertions for common types like List is great but it would so nice to have some for your own types ! </p>
<p>Well this is possible with AssertJ because it is easily extensible so it's simple to <a href="https://github.com/joel-costigliola/assertj-core/wiki/Creating-specific-assertions">write assertions for your custom types</a>.<br>
Moreover, to ease your work, we provide assertions generator that can take a bunch of custom types and create for you specific assertions, we provide : </p>
<ul>
<li>a <strong><a href="https://github.com/joel-costigliola/assertj-assertions-generator#readme">CLI assertions generator</a></strong> </li>
<li>A <strong><a href="https://github.com/joel-costigliola/assertj-assertions-generator-maven-plugin#readme">Maven plugin assertions generator</a></strong><br>
</li>
<li>An Eclipe plugin assertions generator (available soon)</li>
</ul><h2>
<a name="replacing-junit-assertions-by-assertj-assertions" class="anchor" href="#replacing-junit-assertions-by-assertj-assertions"><span class="octicon octicon-link"></span></a><a name="junit-to-assertj-assertions"></a>Replacing JUnit assertions by AssertJ Assertions</h2>
<p>To help you replace JUnit assertions by AssertJ ones, follow the steps described <a href="https://github.com/joel-costigliola/assertj-core/wiki/Converting-JUnit-assertions-to-AssertJ-Assertions"><strong>here</strong></a>, they are based on regex search and replace.</p>
<h2>
<a name="why-having-forked-fest-assert-" class="anchor" href="#why-having-forked-fest-assert-"><span class="octicon octicon-link"></span></a><a name="fest-assertj"></a>Why having forked Fest Assert ?</h2>
<p>AssertJ is a fork of FEST Assert a great project I have contributed to during 3 years, so why having forked it ? </p>
<p>Well there are two main reasons : </p>
<ul>
<li>FEST 2.0 will only provide a limited set of assertions, far less than Fest 2.0M10 and even less than FEST 1.x.<br>
</li>
<li>FEST is not enough open to users demands and contributions.</li>
</ul><p>On the contrary <strong>AssertJ goal is to provide a rich set of assertions</strong> and any resonable requests to enrich AssertJ assertions is welcome as we know it will be useful to someone. Said otherwise, AssertJ is <strong>community driven</strong>, we listen to our users because AssertJ is built for them. </p>
<p>If you feel that some assertion is missing, please <a href="https://github.com/joel-costigliola/assertj-core/issues"><strong>fill a ticket</strong></a> or even better make a contribution ! </p>
<p><em>Joel Costigliola (AssertJ creator)</em></p>
<h2>
<a name="migrating-from-fest-assertions" class="anchor" href="#migrating-from-fest-assertions"><span class="octicon octicon-link"></span></a><a name="migrating-from-fest"></a>Migrating from Fest assertions</h2>
<p>As AssertJ starts where Fest 2.0M10 has left, migrating from Fest to AssertJ Assertions is easy, you only have to change your static import, just replace :</p>
<div class="highlight highlight-java"><pre><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">fest</span><span class="o">.</span><span class="na">assertions</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span>
</pre></div>
<p>by :</p>
<div class="highlight highlight-java"><pre><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">assertj</span><span class="o">.</span><span class="na">core</span><span class="o">.</span><span class="na">api</span><span class="o">.</span><span class="na">Assertions</span>
</pre></div>
<p>This should be all, if not please fill a ticket so that I can update this section.</p>
<p>If you are using Fest Assert 1.x, please read this <a href="https://github.com/joel-costigliola/assertj-core/wiki/Migrating-from-FEST-Assert-1.4">migration guide</a>.</p>
<h2>
<a name="documentation--mailing-list" class="anchor" href="#documentation--mailing-list"><span class="octicon octicon-link"></span></a><a name="doc"></a>Documentation & Mailing list</h2>
<p>You can ask questions and make suggestions on <a href="https://groups.google.com/forum/?fromgroups=#!forum/assertj"><strong>AssertJ google group</strong></a>.<br>
To directly jump to a more complete documentation please go to <strong><a href="https://github.com/joel-costigliola/AssertJ-core/wiki">AssertJ wiki</a></strong>.</p>
<h2>
<a name="want-to-contribute-" class="anchor" href="#want-to-contribute-"><span class="octicon octicon-link"></span></a><a name="contributing"></a>Want to contribute ?</h2>
<p>You are very welcome to contribute any missing useful assertions, please check the <a href="CONTRIBUTING.md">contributor guidelines</a>.</p>
</section>
</div>
<!--[if !IE]><script>fixScale(document);</script><![endif]-->
</body>
</html>