Index

A

a(), jMock, 340

AbstractTableModel class, 152

acceptance tests, 4, 7–10

failing, 6–7, 39–40, 42, 271

for changed requirements, 40

for completed features, 40

for degenerate cases, 41

for new features, 6, 39–40, 105, 225

readability of, 42

Action interface, 341, 344

ActionListener interface, 185, 187

ActiveDirectory, 232

adapters, 48, 70–71, 284, 297

addSniper(), 180

addUserRequestListenerFor(), 187

adjustments, 52–53, 238

mocking, 58

@After annotation, 23, 96

@AfterClass annotation, 223

Agile Development, 35, 47, 81, 83, 205, 329

aliasing, 50

allOf(), Hamcrest, 340

allowances, 146, 277–279

allowing(), jMock, 145–146, 181, 211, 243, 278, 278, 339

an(), jMock, 340

announce(), jMock, 187

announceClosed(), 106–107, 176

Announcer class, 187, 192

aNonNull(), jMock, 340

ant build tool, 95

aNull(), jMock, 340

any(), Hamcrest, 340

anyOf(), Hamcrest, 340

Apache Commons IO library, 221

application model, 48

ApplicationRunner class, 85, 89–92, 106–107, 140, 153, 168, 175–177, 183, 207, 254

aRowChangedEvent(), 157, 162

ArrayIndexOutOfBoundsException, 217

aSniperThatIs(), 161–162, 278

assertColumnEquals(), 157

assertEquals(), JUnit, 21–22, 276

assertEventually(), 321–323, 326

assertFalse(), JUnit, 24, 255

assertions, 22, 254–255

extending, 343–345

failing, 24, 268

messages for, 268

naming, 86

narrowness of, 255, 275–276

quantity of, 252

vs. synchronizations, 326

vs. test setup, 211

assertIsSatisfied(), JUnit, 271

assertNull(), JUnit, 21–22

assertRowMatchesSnapshot(), 180

assertThat(), JUnit, 24–25, 253–255, 268, 276

assertTrue(), JUnit, 21–22, 24, 255

asynchrony, 87, 180, 216, 262

testing, 315–327

atLeast(), jMock, 127, 278, 339

atMost(), jMock, 339

AtomicBigCounter class, 311–312

AtomicInteger class, 309–310

attachModelListener(), Swing, 156–157

Auction interface, 62, 126–131, 136, 155, 193, 203

Auction Sniper, 75–226

bidding, 79, 84, 105–121, 126–131, 162

for multiple items, 175

stopping, 79, 205–213

connecting, 108, 111, 179, 183

disconnecting, 219–220

displaying state of, 97–98, 128, 144–146, 152–155, 159–160, 171, 323

failing, 215–217

joining auctions, 79, 84, 91, 94, 98–100, 179–181, 184–186, 197–199

losing, 79, 84, 91, 100–102, 125, 130, 164, 205–206

portfolio of, 199

refactoring, 191–203

synchronizing, 106, 301

table model for, 149–152, 156–160, 166

translating messages from auction, 112–118, 139–142, 217

updating current price, 118–121

user interface of, 79, 84, 96–97, 149–173, 183–188, 207–208, 212, 316

walking skeleton for, 79, 83–88

when an auction is closed, 84, 94

winning, 79, 139–148, 162–164

auctionClosed(), 25, 58, 116–117, 119–120, 123–125

AuctionEvent class, 134–136

AuctionEventListener interface, 19, 26, 61, 113, 117, 120, 123–124, 141, 192–193, 217–220

auctionFailed(), 217–220

AuctionHouse interface, 196, 210

AuctionLogDriver class, 221, 224

AuctionMessageTranslator class, 25–27, 61, 112–118, 134–136, 154, 192, 195, 217–219, 222, 224, 226

AuctionMessageTranslatorTest class, 141

AuctionSearchStressTests class, 307–309

AuctionSniper class, 62, 123–134, 154–155, 172–173, 192, 198–199, 208, 210–212

AuctionSniperDriver class, 91, 153, 168, 184, 207, 254

AuctionSniperEndToEndTest class, 85, 152, 183

AuctionSniperTest class, 218

B

@Before annotation, 23

between(), jMock, 339

bidsHigherAndReportsBiddingWhenNewPriceArrives(), 127, 143

“Big Design Up Front,” 35

BlockingQueue class, 93

breaking out technique, 59–61, 136

budding off technique, 59, 61–62, 209

build

automated, 9, 36–37, 95

features included in, 8

from the start of a project, 31

build(), 258–261

Builder pattern, 66, 337

builders. See test data builders, 254

bundling up technique, 59–60, 62, 154

C

C# programming language, 225

cannotTranslateMessage(), 222–223

CatalogTest class, 21, 23

Chat class, 112, 115, 129–130, 185, 192, 219

encapsulating, 193–195

chatDisconnectorFor(), 220, 226

ChatManager class, 101, 129

ChatManagerListener interface, 92

check(), WindowLicker, 187

checking(), jMock, 210, 337

classes, 14

coherent, 12

context-independent, 55

encapsulating collections into, 136

helper, 93

hierarchy of, 16, 67

internal features of, 237

loosely coupled, 11–12

mocking, 223–224, 235–237

naming, 63, 159–160, 238, 285, 297

tightly coupled, 12

Clock interface, 230–232

code

adapting, 172

assumptions about, 42

cleaning up, 60, 118, 125, 131, 137, 245, 262–264

compiling, 136

declarative layer of, 65

difficult to test, 44, 229

external quality of, 10–11

implementation layer of, 65

internal quality of, 10–11, 60

loosely coupled, 11–12

maintenance of, 12, 125

readability of, 51, 162, 173, 226, 247

reimplementing, 60

tightly coupled, 12

code smells, 63, 181

cohesion, 11–12

collaborators, 16, 279

collections

encapsulating, 136

vs. domain types, 213

commands, 78, 278

commit(), 279

communication patterns, 14, 58

communication protocols, 58, 63

ComponentDriver, 90

“composite simpler than the sum of its parts,” 53–54, 60, 62

concurrency, 301–306, 309, 313–316

connect(), Smack, 100

connection(), 100

Connextra, 330–332

constants, 255

constructors

bloated, 238–242

real behavior in, 195

container-managed transactions, 293

containsTotalSalesFor(), 264

context independence, 54–57, 233, 305

CountDownLatch class, 194

coupling, 11–12

CRC cards, 16, 186, 333

createChat(), Smack, 129

Crystal Clear, 1

currentPrice(), 118–120, 123, 141, 162–163

currentTimeMillis(), java.lang.System, 230

customer tests. See acceptance tests

D

DAO (Data Access Object), 297

database tests. See persistence tests

DatabaseCleaner class, 291–292

databases

cleaning up before testing, 290–292

operations with active transactions in, 300

data-driven tests, 24

date manipulation, 230–233

“debug hell,” 267

Decorator pattern, 168, 300

Defect exception, 165

dependencies, 52–53, 126

breaking in unit tests, 233

explicit, 14

hidden, 273

implicit, 57, 232–233

knowing about, 231

loops of, 117, 129, 192

mocking, 58

on user interface components, 113

quantity of, 57, 241–242, 273

scoping, 62

using compiler for navigating, 225

dependency injections, 330

deployment, 4, 9

automated, 35–37

from the start of a project, 31

importance for testing, 32

describeMismatch(), Hamcrest, 343–345

describeTo(), Hamcrest, 343–345

design

changing, 172

clarifying, 235

feedback on, 6

quality of, 273

DeterministicExecutor class, 303–304

development

from inputs to outputs, 43, 61

incremental, 4, 36, 73, 79, 136, 201, 303

iterative, 4

of user interface, 183

working compromises during, 90, 95

disconnect(), Smack, 111

disconnectWhenUICloses(), 111, 179

domain model, 15, 48, 59, 71, 290

domain types, 213, 262, 269

domain-specific language, embedded in Java, 332

“Don’t Repeat Yourself” principle, 248

duplication, 262–264, 273, 275

Dynamock library, 332

E

Eclipse development environment, 119

encapsulation, 49–50, 55

end-to-end tests, 8–10

asynchronous, 87

brittleness of, 87

early, 32–33

failing, 87

for event-based systems, 87

for existing systems, 33, 37

on synchronization, 313

running, 11

simulating input and output events, 43

slowness of, 87, 300

EntityManager class, 279, 297, 299

EntityManagerFactory class, 279

EntityTransaction class, 279

equal(), jMock, 340

equals(), java.lang.Object, 154

equalTo(), Hamcrest, 322

error messages. See failure messages

event-based systems, 86–87

events, 78

external, 71, 326–327

listening for, 316–317, 323–325

processed in sequence, 325–326

exactly(), jMock, 338

exceptions, 22

catching, 253–254

on hidden threads, 302

runtime, 165

with helpful messages, 330

Executor interface, 303, 305

“Expect Unexpected Changes” principle, 45

Expectation jMock class, 64

ExpectationCounter jMock class, 330

expectations, 18, 27, 64–66, 146, 254–255, 277–279, 338

blocks of, 337, 339

checking after test’s body, 271

clear descriptions of, 25

narrowness of, 255, 277–283

order of, 128, 282, 341–342

quantity of, 242–244, 252

specifying actions to perform, 341

Expectations jMock class, 66, 337, 340

ExpectationSet jMock class, 330

ExpectationValue jMock class, 330

expectFailureWithMessage(), 222

expectSniperToFailWhenItIs(), 219, 253

F

failed(), 219

failure messages, 268–269, 276

clearness of, 42

self-explanatory, 24–25, 343

failures, 41

detecting, 217–218

diagnostics for, 267–273, 297, 302–307, 332

displaying, 218–219

handling, 215–226

messages about, 255

recording, 221–225, 291

writing down while developing, 41

FakeAuctionServer class, 86, 89, 92–95, 107–110, 120, 176, 194, 254, 276

FeatureMatcher Hamcrest class, 162, 178

feedback, 4, 229, 233

from automated deployment, 35–36

incremental, 300

loops of, 4–5, 8, 40

on design, 6, 299

on failure cases, 41

on implementations, 6

rapid, 317

Findbugs, 313

fixtures, 23

functional tests. See acceptance tests

G

garbage collection, 23, 91, 101, 192–194

getBody(), Smack, 222

getColumnCount(), Swing, 158

getValueAt(), Swing, 158

H

Hamcrest library, 21, 24–25, 95, 268, 274, 296, 322, 333, 340, 343–345

hasColumnTitles(), 169

hasEnoughColumns(), 156–157

hashCode(), java.lang.Object, 154

hasProperty(), Hamcrest, 178

hasReceivedBid(), 106–107

hasReceivedJoinRequestFrom(), 109, 176

hasReceivedJoinRequestFromSniper(), 106–108

hasShownSniperHasWon(), 323

hasShownSniperIsBidding(), 106, 110

hasShownSniperIsLosing(), 206–207

hasShownSniperIsWinning(), 140, 176, 323

hasTitle(), 169

helper methods, 7, 51, 66, 162, 166, 210, 226, 253, 263, 280

naming, 51, 162

Hibernate, 48, 289, 294

HTTP (HyperText Transfer Protocol), 81

I

IDEs

filling in missing methods on request, 119

navigation in, 114

IETF (Internet Engineering Task Force), 77

ignoring(), jMock, 145, 278–279, 339

ignoringAuction(), 219

IllegalArgumentException, 22

implementations

feedback on, 6

independent of context, 244

null, 130, 136, 180, 218

index cards

for technical tasks to be addressed, 41

for to-do lists, 80–81, 103, 120–121, 130–131, 148, 171, 182, 201, 211–212, 225

information hiding, 49, 55–56

initializers, 23

inSequence(), jMock, 338, 341

instanses, 237–238

integration tests, 9–10, 186–188

and threads, 71

difficult to code, 44

for adapters, 70

for persistence implementations, 300

passing, 40

speed of, 300

IntelliJ IDEA, 119, 250

interface discovery, 19

interfaces, 14, 58, 61

callback, 71

implementing, 63–64

mocking, 235

naming, 63–64, 237, 297

narrowness of, 63

pulling, 61, 63

refactoring, 63–64

relationships with, 63

segregating, 236

invocations

allowed, 27, 146

constrained, 342

counting, 338–339

expected, 27, 146

number of, 27

order of, 279–282, 341

invokeAndWait(), Swing, 100, 180

invokeLater(), Swing, 100

isForSameItemAs(), 181

isSatisfied(), WindowLicker, 320–321

Item class, 209–211, 213

iteration zero, 83, 102

J

Jabber. See XMPP

Java programming language, 21

arrays in, 177

collections in, 179

logging framework in, 223

method overloading in, 261

package loops in, 191

synchronization errors in, 313

syntax noise of, 253

using compiler to navigate dependencies, 225

Java EE (Java Platform, Enterprise Edition), 293–294, 301

Java Servlet API, 330

JAXB (Java API for XML Binding), 289

JButton Swing component, 185

JDBC (Java Database Connectivity), 294

JDO (Java Data Objects), 289

JFormattedTextField Swing component, 208

JFrame Swing component, 96

JFrameDriver WindowLicker class, 91

JIDs (Jabber IDs), 77, 197

JLabel Swing component, 150

jMock library, 24–27, 274, 332

allowances in, 146

double braces in, 337

expectations in, 25, 64–66, 146

extensions to, 162

generating messages in, 345

states in, 145

using for stress tests, 307

verifying mock objects in, 24

version 2, 21, 25–27, 333, 335–342

JMS (Java Messaging Service), 292

JMSTransactor class, 292

joinAuction(), 100, 131–132, 142, 180–182, 187–188, 192, 208

JPA (Java Persistence API), 279, 289, 294

persistence identifiers in, 295

JTA (Java Transaction API), 292

JTable Swing component, 52, 149–157, 170

JTATransactor class, 292–293

JTextField Swing component, 185

JUnit library, 84, 274, 332–333

generating messages in, 345

new instances for each test in, 22, 117

version 4.5, 24

version 4.6, 21, 335

JUnit4Mockery jMock class, 336

L

Law of Demeter. See “Tell, Don’t Ask” principle

Lisp programming language, 66

literals. See values

locks, 302, 318

log files, 221–225, 291

cleaning up before testing, 221

generating, 223

Logger class, 223–224, 237

logging, 233–235

amount of, 235

diagnostic, 233–235

isolated in a separate class, 226

LoggingXMPPFailureReporter class, 223–224

LTSA tool, 302, 313

M

Main class, 91, 101, 108, 117–118, 123, 126, 132–134, 142, 168, 178–180, 183, 185, 188–203

matchmaker role of, 191

main(), 91, 96

MainWindow class, 96, 100, 113, 134, 151, 156, 166–167, 185–187, 199, 208–209

MainWindowTest class, 186, 209

makeControls(), 184–185

Mars Climate Orbiter disaster, 59

Matcher interface, 25, 268, 343–345

matchers, 24–25, 95, 155, 157, 276, 322, 339–340

combining, 24

custom, 25, 178, 296, 340, 343–345

reversing, 24

stateless, 344

Matchers Hamcrest class, 340

matches(), Hamcrest, 343

meetings, 4

MessageHandler class, 217

MessageListener interface, 93–94, 99, 112–115, 129, 219

messages, 13, 17

between objects, 50, 58

creating and checking in the same construct, 109

parsing, 118–120 See also failure messages

methods, 13

calling, 65

order of, 128

expected, 339–340

factory, 257–258, 260–261

getter, 329–330

grouping together, 176

ignoring, 279

naming, 86, 173, 250

overloading, 261

side effects of, 51

“sugar,” 65–66

testing, 43 See also helper methods

MissingValueException, 218

mock objects, 18–20, 25–27

creating, 336

for third-party code, 69–71, 157, 300

history of, 329–333

invocation order of, 279–282

naming, 336

to visualize protocols, 58, 61

mockery, 20, 25

Mockery jMock class, 26, 64, 66, 307, 336

mocking

adjustments, 58

classes, 223–224, 235–237

dependencies, 58

interfaces, 235

notifications, 58

peers, 58

returned types, 279

third-party code, 237

values, 237–238

Moon program, 41

multithreading. See threads

N

.Net, 22, 232

“Never Pass Null between Objects” principle, 274

never(), jMock, 339

NMock library, 332

not(), Hamcrest, 24, 340

notifications, 52–53, 126, 192

capturing, 318–320

mocking, 58

order of, 280

recording, 324

notifiesAuctionClosedWhenCloseMessageReceived(), 114

notifiesAuctionFailedWhenBadMessageReceived(), 217

notifiesAuctionFailedWhenEventTypeMissing(), 218

notifiesBidDetailsWhenCurrentPriceMessageReceivedFromOtherBidder(), 141

notifiesBidDetailsWhenCurrentPriceMessageReceivedFromSniper(), 141

notToBeGCd field, 101, 179, 197, 200, 203

NullPointerException, 53, 274

NUnit library, 22, 117, 332

O

object mother pattern, 257–258

object-oriented programming, 13, 329

objects

abstraction level of, 57

bringing out relationships between, 236

collaborating, 18–20, 52–53, 58, 60–62, 186

communicating, 13–14, 50, 58, 244–245

composite, 53–54

context-independent, 54–55, 233

created by builders, 259–260

difficult to decouple, 273

mutable, 14

sharing references to, 50

naming, 62, 244

null, 22, 115, 130, 242

observable invariants with respect to concurrency of, 306

passive, 311–312

persistent, 298–299

simplifying, 55

single responsibility of, 51–52

states of, 13, 59, 145–146, 281–283, 299, 306, 342

subordinate, 254, 291–292, 311

tracer, 270–271

validity of, 53

vs. values, 13–14, 51, 59

web of, 13, 64–65

oneOf(), jMock, 278, 337–338

Openfire, 86, 89, 95

ORM (Object/Relational Mapping), 289, 297, 299

P

packages

loops of, 191

single responsibility of, 52

pair programming, 4

patterns, naming after, 297

peers, 50

mocking, 58

types of, 52–53

persistence tests, 289–300

and transactions, 292–294

cleaning up at the start, 291

failure diagnostics in, 297

isolating from one another, 290–292

round-trip, 297–300

slowness of, 300

Poller class, 320–321

polling for changes, 317, 320–321, 323–325

PortfolioListener interface, 199

ports, 48

“ports and adapters” architecture, 48, 201, 284, 297

PriceSource enumeration, 141, 148

Probe interface, 320–322

probing a system, 315, 320–322

processMessage(), Smack, 114–115, 135–136, 217, 219

production environment, 95

programming styles, 51

progress measuring, 4, 40

PropertyMatcher Hamcrest class, 178

Q

queries, 278

R

receivesAMessageMatching(), 108

redesign, 7

refactoring, 5–7

code difficult to test, 44–45

importance of, during TDD, 225–226

incremental, 202

writing down while developing, 41

reference types, 269

regression suites, 6, 40

regression tests, 5

releases, 4, 9

planning, 81

to a production system, 35

removeMessageListener(), Smack, 220

reportPrice(), 106–107, 176

reportsInvalidMessage(), 216, 221

reportsLostIfAuctionClosesImmediately(), 145

reportsLostIfAuctionClosesWhenBidding(), 146

repository pattern, 297

resetLogging(), 223

responsibilities, 16, 171, 220, 222

quantity of, 61, 240–241, 332 See also “single responsibility” principle

reverting changes, 267

rock climbing, 202

roles, 16

rollback(), 279

rolling back, 267

Ruby programming language, 331

Rule annotation, 24

RuntimeException, 255, 277

runUntilIdle(), 304

@RunWith annotation, 23, 26, 336

S

safelyAddItemToModel(), 180, 188

same(), jMock, 340

sample(), WindowLicker, 320–321

scheduled activities, 326–327

Scrum projects, 1

SelfDescribing interface, 343

sendInvalidMessageContaining(), 216

Sequence jMock class, 341–342

sequences, 279–282, 341–342

servlets, 301, 311

setImposteriser(), jMock, 223

setStatusText(), 166

[Setup] methods, 22

showsSniperHasFailed(), 216

showsSniperHasWonAuction(), 140, 176

showsSniperStatus(), 91–92

“single responsibility” principle, 51–52, 113, 123, 125, 220, 222

SingleMessageListener class, 93–94, 107–108

singleton pattern, 50, 230

Smack library, 86

exceptions in, 217

threads in, 93, 301

Smalltalk programming language

cascade, 258, 330, 332

programming style compared to Java, 330

Sniper application. See Auction Sniper

Sniper class, 62

sniperAdded(), 203

sniperBidding(), 126–128, 155, 160–162

SniperCollector class, 62, 198–199, 245

sniperForItem(), 198

SniperLauncher class, 62, 197–199, 210

SniperListener interface, 124–126, 133, 154–155, 163–164, 168

sniperLost(), 125, 147, 164

sniperMakesAHigherBidButLoses(), 139

SniperPortfolio class, 199–203

sniperReportsInvalidAuctionMessageAndStopsRespondingToEvents(), 216

SniperSnapshot class, 159–164, 173, 180–181, 198–199, 211, 219, 278

SnipersTableModel class, 149, 151–152, 156, 166, 168, 170–171, 180–182, 185, 197–201, 207

SniperState class, 155, 158–161, 207, 216, 278

sniperStateChanged(), 156–164, 278

SniperStateDisplayer class, 133, 147, 155, 167–168

sniperWinning(), 143, 162–163

sniperWinsAnAuctionByBiddingHigher(), 139

sniperWon(), 147, 164

Spring, 294

startBiddingFor(), 184

startBiddingIn(), 177

startBiddingWithStopPrice(), 206–207

startSellingItem(), 92, 176

startSniper(), 183–184

startsWith(), Hamcrest, 343–345

state machines, 279–282, 342

state transition diagrams, 212

States jMock class, 146, 198, 281–283

static analysis tools, 313

stop price, 80, 205–213

stress tests, 306–313

failing, 308–309, 313

on event processing order, 326

on passive objects, 311–312

running in different environments, 313

strings

checking if starts with a given prefix, 343–345

comparing, 14

vs. domain types, 213, 262, 269

StringStartsWithMatcher Hamcrest class, 345

stubs, 84, 243, 277, 339

success cases, 41

Swing

manipulating features in, 90

testing, 86–87

threads in, 123, 133, 180, 301

SwingThreadSniperListener interface, 168, 197, 199

Synchroniser jMock class, 307–308, 312–313

synchronizations, 301–314

errors in, 302

testing, 302, 306–310, 313

vs. assertions, 326

system

application model of, 48

changing behavior of, 48, 55

concurrency architecture of, 301–302

maintainability of, 47

public drawings of, during development, 34

returning to initial state after a test, 323

simplifying, 112

system tests. See acceptance tests

T

tableChanged(), Swing, 157, 181

TableModel class, 149, 168–171

TableModelEvent class, 157, 180–181

TableModelListener class, 156–157

task runners, 303

TDD (Test-Driven Development), 1, 5, 229

cycle of, 6, 39–45, 271–272

for existing systems, 37

golden rule of, 6

kick-starting, 31–37

sustainable, 227–285

[TearDown] methods, 22

“Tell, Don’t Ask” principle, 17, 54, 245

template methods, 344

test data builders, 238, 258–259

calling within transactions, 300

combining, 261, 300

creating similar objects with, 259–260

lists of, 298–299

removing duplication with, 262–264

wrapping up in factory methods, 261

test runner, 23–24

JMock, 26

Parameterized, 24

“test smells,” 229, 235, 248

benefits of listening to, 244–246

@Test annotation, 22

TestDox convention, 249–250

Test-Driven Development. See TDD

tests

against fake services, 84, 88, 93

against real services, 32, 88, 93

asynchronous, 315–327

at the beginning of a project, 36, 41

brittleness of, 229, 255, 257, 273

cleaning up, 245, 248, 273

decoupling from tested objects, 278

dependencies in, 275

explicit constraints in, 280

failing, 267–273

flexibility of, 273–285

flickering, 317

focused, 273, 277, 279, 279

for late integration, 36

hierarchy of, 9–10

maintaining, 247, 273–274

naming, 44, 248–250, 252, 264, 268, 326

readability of, 247–257, 273, 280

repeatability of, 23

runaway, 322–323

running, 6

sampling, 316–317, 320–325

self-explanatory, 274–275

separate packages for, 114

size of, 45, 268

states of, 283

synchronizing, 301–314, 317

with background threads, 312–313

tightly coupled, 273

triggering detectable behavior, 325

writing, 6

backwards, 252

in a standard form, 251–252 See also acceptance tests, end-to-end tests, integration tests, persistence tests, unit tests

textFor(), 166

“the simplest thing that could possibly work,” 41

then(), jMock, 281–282, 338, 342

third-party code, 69–72

abstractions over, 10

mocking, 69–71, 157, 237, 300

patching, 69

testing integration with, 186–188, 289

value types from, 71

Thor Automagic, 12

threads, 71, 301–315

scheduling, 313

three-point contact, 202

time boxes, 4

Timeout class, 318, 322

timeouts, 230, 312–313, 316–318

timestamps, 276

toString(), java.lang.Object, 154

tracer object, 270–271

“train wreck” code, 17, 50–51, 65

transaction management, 294

transactors, 292–293

translate(), 217

translatorFor(), 220, 226, 253

TypeSafeMatcher<String> Hamcrest class, 344

U

unit tests, 4, 9

against static global objects, 234

and threads, 301–314

at the beginning of a project, 43

breaking dependencies in, 233

brittleness of, 245

difficult to code, 44

failing, 8

isolating from each other, 22, 117

length of, 245–246

limiting scope of, 57

naming, 114, 141

on behavior, not methods, 43

on collaborating objects, 18–20

on synchronization, 302, 306–310, 313

passing, 40

readability of, 245–246

simplifying, 62

speed of, 300, 312

structure of, 335–342

writing, 11

Unix, 66

User Experience community, 81, 212

user interface

configuring through, 242

dependencies on, 113

handling user requests, 186

support logging in, 233

working on parallel to development, 183, 212

UserRequestListener interface, 186–188, 208–209, 213

V

value types, 59–60, 141

from third-party code, 71

helper, 59

naming, 173

placeholder, 59, 209

public final fields in, 154

vs. values, 59

with generics, 136

valueIn(), 166–167

ValueMatcherProbe WindowLicker class, 187

values, 255–256

comparing, 22

expected, 127

immutable, 50, 59

mocking, 237–238

mutable, 50

obviously canned, 270

self-describing, 269, 285

side effects of, 51

vs. objects, 13–14, 51, 59

variables, 255–256

global, 50

naming, 209, 330

W

waitForAnotherAuctionEvent(), 216

waitUntil(), 326

walking skeleton, 32–37

for Auction Sniper, 79, 83–88

when(), jMock, 281–282, 338, 342

whenAuctionClosed(), 164–165

will(), jMock, 338, 341

WindowAdapter class, 134

WindowLicker library, 24, 86–87, 186–187, 254, 316

controlling Swing components in, 90–91

error messages in, 96

with(), jMock, 339–340

overloaded, 261

X

XmlMarshaller class, 284–285

XmlMarshallerTest class, 284

XMPP (eXtensible Messaging and Presence Protocol), 76–77, 105, 203

messages in, 301

reliability of, 81

security of, 81

XMPP message brokers, 84, 86, 95

XMPPAuction class, 62, 131–132, 192–197, 203, 224

XMPPAuctionException, 224

XMPPAuctionHouse class, 62, 196–197, 203, 224

XMPPConnection class, 195–197

XMPPException, 130

XMPPFailureReporter class, 222–223, 226

XP (Extreme Programming), 1, 41, 331

XStream, 289

XTC (London Extreme Tuesday Club), 331

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.227.111.208