Re: [testdrivendevelopment] How would you TDD a website front-end?

"Russell Gold" <[email protected]> Sat, 4 Jan 2020 21:09:20 -0500
Newsgroups gmane.comp.programming.test-driven-development
Message-ID <[email protected]>
--Apple-Mail=_04913F22-9081-46F5-AC27-5BADD4DA9A00
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

And that is why UI testing in general needs to be split into tests of the b=
usiness logic independently of the UI. UI testing is never going to be all =
that fast or easy, but whatever can be automated is much faster than  the a=
lternative.
-----------------
Author, Getting Started with Apache Maven <http://www.packtpub.com/getting=
-started-with-apache-maven/video>
Author, HttpUnit <http://www.httpunit.org> and SimpleStub <http://simplest=
ub.meterware.com>
Now blogging at <http://russgold.net/sw/>

Have you listened to Edict Zero <https://edictzero.wordpress.com <https://=
edictzero.wordpress.com/>>? If not, you don=E2=80=99t know what you=E2=80=
=99re missing!





> On Jan 4, 2020, at 5:03 PM, Gregory Salvan <[email protected]> wrote:
>=20
> Sorry I'm not convinced by all answers, specially when I see end to end =
tests, TDD is rapid feedback and "end to end tests" are slow.
> To illustrate my feelings, I've found the following article about Cohn p=
yramid : https://martinfowler.com/articles/practical-test-pyramid.html <htt=
ps://martinfowler.com/articles/practical-test-pyramid.html>=20
> I think tests like the following for example are useless: https://github=
.com/hamvocke/spring-testing/blob/master/src/test/java/example/HelloE2ERest=
Test.java <https://github.com/hamvocke/spring-testing/blob/master/src/test/=
java/example/HelloE2ERestTest.java>
> What's the purpose of the test shouldReturnGreeting() ? What is he testi=
ng really ?=20
> A different approach can consist in unit testing with small steps hello =
method (String hello(@PathVariable final String lastName)), and checking if=
  "/hello/{lastName}" is mapped to this method.
> Which one gives you the fastest feedback ? In case of test break, which =
one will permit you to find faster where it's broken ?
> Which approach document the best what you're testing ? Look at all the t=
ests, what if we want to show last name before first name ?
> Don't you feel this kind of test are like "testing the compiler" ?
>=20
> The question I try to keep in mind is **"What is my SUT"** ? In this cas=
e spring framework is not, you can test it, but in my opinion its outside o=
f TDD scope.
> +1 to George Dinwiddie answer
>=20
> Hope it helps
>=20
>=20
>=20
>=20
>=20
>=20
>=20
> Le sam. 4 janv. 2020 =C3=A0 12:57, Ken Mccormack <[email protected]=
 <mailto:[email protected]>> a =C3=A9crit :
> You need to split functions into separate categories - orthogonal concer=
ns - not confuse/couple them by end to end flow tests.=20
>
> TBH a lot depends on the kind of quality outcomes you are looking for, t=
he complexity of your UI-side logic, and the tech skills of your team.
>=20
> My guess with Blazor is that this is just standard nunit tests running a=
gainst C# models.  For the most part, I'd write non-200 tests here, e.g. a =
stubs will cover un-happy paths, malformed responses, all classes API error=
s, but also things like already created.  Other concerns would be tested us=
ing functional tests, probably, rather than repeat the same coverage in mul=
tiple places.
>=20
> But it depends. What is your app about?  What is its most complex piece?=
  Why Blazor, rather than React?  Why silo front end tests, do you have a s=
eparate API team?  What are your QA processes?
>=20
> The typical set of application tests might be -
>=20
> 1. unit tests to cover  UI model logic, and in particular, to emulate er=
ror and fault cases=20
> 2. API tests - if you're in a silo, you should be throwing a set of cons=
umer tests across each API release, to ensure that your basic assumptions a=
ren't broken - if the api code is released independently from the front end=
 (eg a microservices architecture) you need to pin down your contract by pa=
ssing the API team a set of tests to litmus check your expectations are bei=
ng met (PACT is one approach that you might try, but frameworks in .net wer=
en't very mature and tbh it's easier to roll your own approach, often)
> 3. UI automation - a journey test that hits each API once in an end to e=
nd flow (eg. place an order)
>=20
> The Cohn test pyramid is often used to describe the above - but it is al=
so naively misquoted and rarely deeply understood - it says *you have to te=
st at all (composition) levels*, and so the pyramid is a reflection of a ty=
pical OO composition style (i.e. not all apps will have their tests resembl=
e a pyramid, many apps use functional tests, and unit test only negative ca=
ses.
>=20
> Doing more advanced CD, for example, requires some system design, i.e. c=
ontrol and observation code, or the ability to run synthetic transactions a=
gainst production.  I'd rather do that first than unit test happy paths. In=
 that situation a simple stub/mockist TDD approach doesn't cut it - but how=
 far you go depends upon the quality outcomes you're looking to achieve in =
terms of deploys per developer per day.=20
>=20
> Kennos
>=20
> 3, 2020 at 01:07 AM, Avi Kessner wrote:
> I would do it like this:
>
> User inputs a value
> Test local model updated with value.
> Form posts model to server.
> Test server handles form model and returns expected model.
> Force response to the model on the GUI
> Test the model has been updated correctly.
> Assume GUI updates correctly cause you if you used framework code to alt=
er the form.
> Otherwise, test your hand written html as if it was a model.
>=20
> On Fri, Jan 3, 2020, 03:49 Alan Baljeu via Groups.Io <alanbaljeu=3Dyahoo=
[email protected] <mailto:[email protected]>> wrote:
> The pattern I have is
>
> User inputs a value
> Form posts value to server
> Server responds with new model data.
> Form reconfigures.
>
> "Test changes to the model" then I think means testing the web service. =
 So don't test the view?
>
> Alan Baljeu
> [email protected] <mailto:[email protected]>
>
>
>
> On Thursday, January 2, 2020, 06:58:20 p.m. EST, Avi Kessner <akessner@g=
mail.com <mailto:[email protected]>> wrote:
>
>
> Test the changes to the model, not the GUI itself.
>=20
> On Fri, Jan 3, 2020, 00:26 George Dinwiddie <[email protected] <ma=
ilto:[email protected]>> wrote:
> Alan,
>=20
> Way back, I played with test-driving AWT and Java Swing UIs, starting=20
> with just jUnit. Given the availability of web driver libraries, you can=
=
=20
> do similar things much more easily.
>=20
> In general, I tested the GUI with a test API to make sure things were=20
> wired up correctly. I tested the actual API to make sure the system=20
> worked correctly.
>=20
> In=20
> https://github.com/gdinwiddie/EquineHoroscope/tree/master/src/test/java/=
com/gdinwiddie/equinehoroscope/acceptance <https://github.com/gdinwiddie/Eq=
uineHoroscope/tree/master/src/test/java/com/gdinwiddie/equinehoroscope/acce=
ptance>=20
> you can see an example of re-using a test that drove the API creation to=
=
=20
> check the same result from the GUI by injecting a different adapter to=
=20
> talk with the system under test.
>=20
>   - George
>=20
> > Alan Baljeu
> > [email protected] <mailto:[email protected]>
> >=20
> >=20
>=20
> --=20
>   ----------------------------------------------------------------------
>    * George Dinwiddie *                      http://blog.gdinwiddie.com =
<http://blog.gdinwiddie.com/>
>    Software Development                    http://www.idiacomputing.com =
<http://www.idiacomputing.com/>
>    Consultant and Coach
>   ----------------------------------------------------------------------
>=20
>=20
>=20
>=20
>
>
>=20
>=20
>=20


-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#35836): https://groups.io/g/testdrivendevelopment/mess=
age/35836
Mute This Topic: https://groups.io/mt/69387056/3268755
Group Owner: [email protected]
Unsubscribe: https://groups.io/g/testdrivendevelopment/leave/6156322/74455=
6386/xyzzy  [[email protected]]
-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-


--Apple-Mail=_04913F22-9081-46F5-AC27-5BADD4DA9A00
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=
=3Dutf-8"></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: =
space; line-break: after-white-space;" class=3D"">And that is why UI testin=
g in general needs to be split into tests of the business logic independent=
ly of the UI. UI testing is never going to be all that fast or easy, but wh=
atever can be automated is much faster than &nbsp;the alternative.<br class=
=
=3D""><div class=3D"">
<div style=3D"color: rgb(0, 0, 0); letter-spacing: normal; text-align: sta=
rt; text-indent: 0px; text-transform: none; white-space: normal; word-spaci=
ng: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbs=
p-mode: space; -webkit-line-break: after-white-space;" class=3D""><div styl=
e=3D"color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-i=
ndent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -=
webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: sp=
ace; -webkit-line-break: after-white-space;" class=3D""><div style=3D"color=
: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px=
; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-tex=
t-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webk=
it-line-break: after-white-space;" class=3D""><div class=3D""><div style=3D=
"orphans: 2; widows: 2;" class=3D"">-----------------</div><div style=3D"or=
phans: 2; widows: 2;" class=3D"">Author,&nbsp;Getting Started with Apache M=
aven &lt;<a href=3D"http://www.packtpub.com/getting-started-with-apache-mav=
en/video" class=3D"">http://www.packtpub.com/getting-started-with-apache-ma=
ven/video</a>&gt;</div><div style=3D"orphans: 2; widows: 2;" class=3D"">Aut=
hor, HttpUnit &lt;<a href=3D"http://www.httpunit.org" class=3D"">http://www=
.httpunit.org</a>&gt; and SimpleStub &lt;<a href=3D"http://simplestub.meter=
ware.com" class=3D"">http://simplestub.meterware.com</a>&gt;<br class=3D"">=
Now blogging at &lt;<a href=3D"http://russgold.net/sw/" class=3D"">http://r=
ussgold.net/sw/</a>&gt;</div><div style=3D"orphans: 2; widows: 2;" class=3D=
""><br class=3D""></div><div style=3D"orphans: 2; widows: 2;" class=3D"">Ha=
ve you listened to Edict Zero &lt;<a href=3D"https://edictzero.wordpress.co=
m" class=3D"">https://edictzero.wordpress.com</a>&gt;? If not, you don=E2=
=80=99t know what you=E2=80=99re missing!</div></div></div><br class=3D"Ap=
ple-interchange-newline"></div><br class=3D"Apple-interchange-newline"></di=
v><br class=3D"Apple-interchange-newline"><br class=3D"Apple-interchange-ne=
wline">
</div>
<div><br class=3D""><blockquote type=3D"cite" class=3D""><div class=3D"">O=
n Jan 4, 2020, at 5:03 PM, Gregory Salvan &lt;<a href=3D"mailto:apieum@gmai=
l.com" class=3D"">[email protected]</a>&gt; wrote:</div><br class=3D"Apple-i=
nterchange-newline"><div class=3D""><div dir=3D"ltr" style=3D"caret-color: =
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; tex=
t-align: start; text-indent: 0px; text-transform: none; white-space: normal=
; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;=
" class=3D""><div class=3D"">Sorry I'm not convinced by all answers, specia=
lly when I see end to end tests, TDD is rapid feedback and "end to end test=
s" are slow.<br class=3D""></div><div class=3D"">To illustrate my feelings,=
 I've found the following article about Cohn pyramid :<span class=3D"Apple-=
converted-space">&nbsp;</span><a href=3D"https://martinfowler.com/articles/=
practical-test-pyramid.html" class=3D"">https://martinfowler.com/articles/p=
ractical-test-pyramid.html</a><span class=3D"Apple-converted-space">&nbsp;<=
/span><br class=3D""></div><div class=3D"">I think tests like the following=
 for example are useless:<span class=3D"Apple-converted-space">&nbsp;</span=
><a href=3D"https://github.com/hamvocke/spring-testing/blob/master/src/test=
/java/example/HelloE2ERestTest.java" class=3D"">https://github.com/hamvocke=
/spring-testing/blob/master/src/test/java/example/HelloE2ERestTest.java</a>=
</div><div class=3D""></div><div class=3D"">What's the purpose of the test<=
span class=3D"Apple-converted-space">&nbsp;</span><span class=3D"gmail-pl-e=
n">shouldReturnGreeting</span>() ? What is he testing really ?&nbsp;</div><=
div class=3D""><span class=3D"gmail-pl-s"><span class=3D"gmail-pl-pds">A di=
fferent approach can consist in unit testing with small steps hello method =
(</span></span><span class=3D"gmail-pl-smi">String</span><span class=3D"App=
le-converted-space">&nbsp;</span><span class=3D"gmail-pl-en">hello</span>(<=
span class=3D"gmail-pl-k">@PathVariable</span><span class=3D"Apple-converte=
d-space">&nbsp;</span><span class=3D"gmail-pl-k">final</span><span class=3D=
"Apple-converted-space">&nbsp;</span><span class=3D"gmail-pl-smi">String</s=
pan><span class=3D"Apple-converted-space">&nbsp;</span><span class=3D"gmail=
-pl-v">lastName</span>)<span class=3D"gmail-pl-s"><span class=3D"gmail-pl-p=
ds">), and checking if<span class=3D"Apple-converted-space">&nbsp;</span><s=
pan class=3D"Apple-converted-space">&nbsp;</span><span class=3D"gmail-pl-s"=
><span class=3D"gmail-pl-pds">"</span>/hello/{lastName}<span class=3D"gmail=
-pl-pds">" is mapped to this method.<br class=3D""></span></span></span></s=
pan></div><div class=3D""><span class=3D"gmail-pl-s"><span class=3D"gmail-p=
l-pds"><span class=3D"gmail-pl-s"><span class=3D"gmail-pl-pds"></span></spa=
n></span></span></div><div class=3D""><span class=3D"gmail-pl-s"><span clas=
s=3D"gmail-pl-pds"></span></span></div><div class=3D""><span class=3D"gmail=
-pl-s"><span class=3D"gmail-pl-pds">Which one gives you the fastest feedbac=
k ? In case of test break, which one will permit you to find faster where i=
t's broken ?<br class=3D""></span></span></div><div class=3D""><span class=
=3D"gmail-pl-s"><span class=3D"gmail-pl-pds">Which approach document the b=
est what you're testing ? Look at all the tests, what if we want to show la=
st name before first name ?<br class=3D""></span></span></div><div class=3D=
""><span class=3D"gmail-pl-s"><span class=3D"gmail-pl-pds">Don't you feel t=
his kind of test are like "testing the compiler" ?<br class=3D""></span></s=
pan></div><div class=3D""><span class=3D"gmail-pl-s"><span class=3D"gmail-p=
l-pds"><br class=3D""></span></span></div><div class=3D""><span class=3D"gm=
ail-pl-s"><span class=3D"gmail-pl-pds">The question I try to keep in mind i=
s **"What is my SUT"** ? In this case spring framework is not, you can test=
 it, but in my opinion its outside of TDD scope.<br class=3D""></span></spa=
n></div><div class=3D""><span class=3D"gmail-pl-s"><span class=3D"gmail-pl-=
pds">+1 to</span></span><span class=3D"Apple-converted-space">&nbsp;</span>=
George Dinwiddie answer<br class=3D""></div><div class=3D""><span class=3D"=
gmail-pl-s"><span class=3D"gmail-pl-pds"><br class=3D""></span></span></div=
><div class=3D""><span class=3D"gmail-pl-s"><span class=3D"gmail-pl-pds">Ho=
pe it helps<br class=3D""></span></span></div><div class=3D""><span class=
=3D"gmail-pl-s"><span class=3D"gmail-pl-pds"><br class=3D""><br class=3D""=
><br class=3D""><br class=3D""></span></span></div><div class=3D""><span cl=
ass=3D"gmail-pl-s"><span class=3D"gmail-pl-pds"><br class=3D""><br class=3D=
""></span></span></div></div><br style=3D"caret-color: rgb(0, 0, 0); font-f=
amily: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: n=
ormal; font-weight: normal; letter-spacing: normal; text-align: start; text=
-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;=
 -webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><div cl=
ass=3D"gmail_quote" style=3D"caret-color: rgb(0, 0, 0); font-family: Helvet=
ica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-w=
eight: normal; letter-spacing: normal; text-align: start; text-indent: 0px;=
 text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text=
-stroke-width: 0px; text-decoration: none;"><div dir=3D"ltr" class=3D"gmail=
_attr">Le&nbsp;sam. 4 janv. 2020 =C3=A0&nbsp;12:57, Ken Mccormack &lt;<a hr=
ef=3D"mailto:[email protected]" class=3D"">[email protected]</a>&=
gt; a =C3=A9crit&nbsp;:<br class=3D""></div><blockquote class=3D"gmail_quot=
e" style=3D"margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-=
style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">Yo=
u need to split functions into separate categories - orthogonal concerns - =
not confuse/couple them by end to end flow tests.&nbsp;<br class=3D"">&nbsp=
;<br class=3D"">TBH a lot depends on the&nbsp;kind of quality outcomes you =
are looking for, the complexity of your UI-side logic, and the tech skills =
of your team.<br class=3D""><br class=3D"">My guess with Blazor is that thi=
s is just standard nunit tests running against C# models.&nbsp; For the mos=
t part, I'd write non-200 tests here, e.g. a stubs will cover un-happy path=
s, malformed responses, all classes API errors, but also things like alread=
y created.&nbsp; Other concerns would be tested using functional tests, pro=
bably, rather than repeat the same coverage in multiple places.<br class=3D=
""><br class=3D"">But it depends. What is your app about?&nbsp; What is its=
 most complex piece?&nbsp; Why Blazor, rather than React?&nbsp; Why silo fr=
ont end tests, do you have a separate API team?&nbsp; What are your QA proc=
esses?<br class=3D""><br class=3D"">The typical set of application tests mi=
ght be -<br class=3D""><br class=3D"">1. unit tests to cover&nbsp; UI model=
 logic, and in particular, to emulate error and fault cases&nbsp;<br class=
=3D"">2. API tests - if you're in a silo, you should be throwing a set of =
consumer tests across each API release, to ensure that your basic assumptio=
ns aren't broken - if the api code is released independently from the front=
 end (eg a microservices architecture) you need to pin down your contract b=
y passing the API team a set of tests to litmus check your expectations are=
 being met (PACT is one approach that you might try, but frameworks in .net=
 weren't very mature and tbh it's easier to roll your own approach, often)<=
br class=3D"">3. UI automation - a journey test that hits each API once in =
an end to end flow (eg. place an order)<br class=3D""><br class=3D"">The Co=
hn test pyramid is often used to describe the above - but it is also naivel=
y misquoted and rarely deeply understood - it says *you have to test at all=
 (composition) levels*, and so the pyramid is a reflection of a typical OO =
composition style (i.e. not all apps will have their tests resemble a pyram=
id, many apps use functional tests, and unit test only negative cases.<br c=
lass=3D""><br class=3D"">Doing more advanced CD, for example, requires some=
 system design, i.e. control and observation code, or the ability to run sy=
nthetic transactions against production.&nbsp; I'd rather do that first tha=
n unit test happy paths. In that situation a simple stub/mockist TDD approa=
ch doesn't cut it - but how far you go depends upon the quality outcomes yo=
u're looking to achieve in terms of deploys per developer per day.&nbsp;<br=
 class=3D""><br class=3D"">Kennos<br class=3D""><br class=3D"">3, 2020 at 0=
1:07 AM, Avi Kessner wrote:<br class=3D""><blockquote class=3D""><div dir=
=3D"auto" class=3D""><div dir=3D"auto" class=3D"">I would do it like this:=
</div><div dir=3D"auto" class=3D"">&nbsp;</div><div class=3D"">User inputs =
a value</div><div dir=3D"auto" class=3D"">Test local model updated with val=
ue.</div><div dir=3D"auto" class=3D"">Form posts model to server.</div><div=
 dir=3D"auto" class=3D"">Test server handles form model and returns expecte=
d model.</div><div dir=3D"auto" class=3D"">Force response to the model on t=
he GUI</div><div dir=3D"auto" class=3D"">Test the model has been updated co=
rrectly.</div><div dir=3D"auto" class=3D"">Assume GUI updates correctly cau=
se you if you used framework code to alter the form.</div><div dir=3D"auto"=
 class=3D"">Otherwise, test your hand written html as if it was a model.<br=
 class=3D""><br class=3D""><div class=3D"gmail_quote" dir=3D"auto"><div cla=
ss=3D"gmail_attr" dir=3D"ltr">On Fri, Jan 3, 2020, 03:49 Alan Baljeu via Gr=
oups.Io &lt;alanbaljeu=3D<a href=3D"mailto:[email protected]" target=3D"_=
blank" class=3D"">[email protected]</a>&gt; wrote:</div><blockquote class=
=
=3D"gmail_quote" style=3D"margin: 0px 0px 0px 0.8ex; border-left-width: 1p=
x; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding=
-left: 1ex;"><div class=3D""><div style=3D"font-family: &quot;Helvetica Neu=
e&quot;, Helvetica, Arial, sans-serif; font-size: 16px;" class=3D""><div cl=
ass=3D""><div dir=3D"ltr" class=3D"">The pattern I have is</div><div dir=3D=
"ltr" class=3D"">&nbsp;</div><div dir=3D"ltr" class=3D"">User inputs a valu=
e</div><div dir=3D"ltr" class=3D"">Form posts value to server</div><div dir=
=
=3D"ltr" class=3D"">Server responds with new model data.</div><div dir=3D"=
ltr" class=3D"">Form reconfigures.</div><div class=3D"">&nbsp;</div><div di=
r=3D"ltr" class=3D"">"Test changes to the model" then I think means testing=
 the web service.&nbsp; So don't test the view?</div><div class=3D"">&nbsp;=
</div><div class=3D""><div style=3D"font-family: Helvetica, Arial, sans-ser=
if; font-size: 16px;" class=3D""><div style=3D"font-family: Helvetica, Aria=
l, sans-serif; font-size: 16px;" class=3D""><div class=3D"">Alan Baljeu</di=
v></div><div style=3D"font-family: Helvetica, Arial, sans-serif; font-size:=
 16px;" class=3D""><a href=3D"mailto:[email protected]" rel=3D"noopener =
noreferrer" target=3D"_blank" class=3D"">[email protected]</a></div><div=
 style=3D"font-family: Helvetica, Arial, sans-serif; font-size: 16px;" clas=
s=3D"">&nbsp;</div></div></div></div><div class=3D"">&nbsp;</div><div class=
=
=3D"">&nbsp;</div></div><div id=3D"gmail-m_2462695110694953152m_1174070532=
757893286ydp89e51f5yahoo_quoted_8399920580" class=3D""><div style=3D"font-f=
amily: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size:=
 13px; color: rgb(38, 40, 42);" class=3D""><div class=3D"">On Thursday, Jan=
uary 2, 2020, 06:58:20 p.m. EST, Avi Kessner &lt;<a href=3D"mailto:akessner=
@gmail.com" rel=3D"noopener noreferrer" target=3D"_blank" class=3D"">akessn=
[email protected]</a>&gt; wrote:</div><div class=3D"">&nbsp;</div><div class=3D"=
">&nbsp;</div><div class=3D""><div id=3D"gmail-m_2462695110694953152m_11740=
70532757893286ydp89e51f5yiv9185559269" class=3D""><div class=3D""><div clas=
s=3D"">Test the changes to the model, not the GUI itself.</div><br clear=3D=
"none" class=3D""><div class=3D""><div dir=3D"ltr" class=3D"">On Fri, Jan 3=
, 2020, 00:26 George Dinwiddie &lt;<a href=3D"mailto:[email protected]=
m" rel=3D"nofollow noopener noreferrer" shape=3D"rect" target=3D"_blank" cl=
ass=3D"">[email protected]</a>&gt; wrote:</div><blockquote style=3D"m=
argin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid;=
 border-left-color: rgb(204, 204, 204); padding-left: 1ex;" class=3D"">Alan=
,<br clear=3D"none" class=3D""><br clear=3D"none" class=3D"">Way back, I pl=
ayed with test-driving AWT and Java Swing UIs, starting<span class=3D"Apple=
-converted-space">&nbsp;</span><br clear=3D"none" class=3D"">with just jUni=
t. Given the availability of web driver libraries, you can<span class=3D"Ap=
ple-converted-space">&nbsp;</span><br clear=3D"none" class=3D"">do similar =
things much more easily.<br clear=3D"none" class=3D""><br clear=3D"none" cl=
ass=3D"">In general, I tested the GUI with a test API to make sure things w=
ere<span class=3D"Apple-converted-space">&nbsp;</span><br clear=3D"none" cl=
ass=3D"">wired up correctly. I tested the actual API to make sure the syste=
m<span class=3D"Apple-converted-space">&nbsp;</span><br clear=3D"none" clas=
s=3D"">worked correctly.<br clear=3D"none" class=3D""><br clear=3D"none" cl=
ass=3D"">In<span class=3D"Apple-converted-space">&nbsp;</span><br clear=3D"=
none" class=3D""><a href=3D"https://github.com/gdinwiddie/EquineHoroscope/t=
ree/master/src/test/java/com/gdinwiddie/equinehoroscope/acceptance" rel=3D"=
nofollow noopener noreferrer" shape=3D"rect" target=3D"_blank" class=3D"">h=
ttps://github.com/gdinwiddie/EquineHoroscope/tree/master/src/test/java/com/=
gdinwiddie/equinehoroscope/acceptance</a><span class=3D"Apple-converted-spa=
ce">&nbsp;</span><br clear=3D"none" class=3D"">you can see an example of re=
-using a test that drove the API creation to<span class=3D"Apple-converted-=
space">&nbsp;</span><br clear=3D"none" class=3D"">check the same result fro=
m the GUI by injecting a different adapter to<span class=3D"Apple-converted=
-space">&nbsp;</span><br clear=3D"none" class=3D"">talk with the system und=
er test.<br clear=3D"none" class=3D""><br clear=3D"none" class=3D"">&nbsp;<=
span class=3D"Apple-converted-space">&nbsp;</span>- George<br clear=3D"none=
" class=3D""><br clear=3D"none" class=3D"">&gt; Alan Baljeu<br clear=3D"non=
e" class=3D"">&gt;<span class=3D"Apple-converted-space">&nbsp;</span><a hre=
f=3D"mailto:[email protected]" rel=3D"nofollow noopener noreferrer" shap=
e=3D"rect" target=3D"_blank" class=3D"">[email protected]</a><br clear=
=3D"none" class=3D"">&gt;<span class=3D"Apple-converted-space">&nbsp;</spa=
n><br clear=3D"none" class=3D"">&gt;<span class=3D"Apple-converted-space">&=
nbsp;</span><br clear=3D"none" class=3D""><br clear=3D"none" class=3D"">--<=
span class=3D"Apple-converted-space">&nbsp;</span><br clear=3D"none" class=
=3D"">&nbsp;<span class=3D"Apple-converted-space">&nbsp;</span>-----------=
-----------------------------------------------------------<br clear=3D"non=
e" class=3D"">&nbsp; &nbsp;* George Dinwiddie *&nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=3D"Apple-conver=
ted-space">&nbsp;</span><a href=3D"http://blog.gdinwiddie.com/" rel=3D"nofo=
llow noopener noreferrer" shape=3D"rect" target=3D"_blank" class=3D"">http:=
//blog.gdinwiddie.com</a><br clear=3D"none" class=3D"">&nbsp; &nbsp;Softwar=
e Development&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=
 &nbsp;<span class=3D"Apple-converted-space">&nbsp;</span><a href=3D"http:/=
/www.idiacomputing.com/" rel=3D"nofollow noopener noreferrer" shape=3D"rect=
" target=3D"_blank" class=3D"">http://www.idiacomputing.com</a><br clear=3D=
"none" class=3D"">&nbsp; &nbsp;Consultant and Coach<br clear=3D"none" class=
=
=3D"">&nbsp;<span class=3D"Apple-converted-space">&nbsp;</span>-----------=
-----------------------------------------------------------<br clear=3D"non=
e" class=3D""><br clear=3D"none" class=3D""><br clear=3D"none" class=3D""><=
br clear=3D"none" class=3D""><br clear=3D"none" class=3D""></blockquote></d=
iv></div></div></div></div></div></div><div class=3D"">&nbsp;<br class=3D"w=
ebkit-block-placeholder"></div><div class=3D"">&nbsp;<br class=3D"webkit-bl=
ock-placeholder"></div></blockquote></div></div></div></blockquote><div cla=
ss=3D""><br class=3D"webkit-block-placeholder"></div><div class=3D""><br cl=
ass=3D"webkit-block-placeholder"></div></blockquote></div></div></blockquot=
e></div><br class=3D""></body></html>

<div width=3D"1" style=3D"color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>

You receive all messages sent to this group.


<p>

<a target=3D"_blank" href=3D"https://groups.io/g/testdrivendevelopment/mes=
sage/35836">View/Reply Online (#35836)</a> |


  <a target=3D"_blank" href=3D"mailto:[email protected]?subj=
ect=3DRe:%20Re%3A%20%5Btestdrivendevelopment%5D%20How%20would%20you%20TDD%2=
0a%20website%20front-end%3F">Reply To Group</a>
  
    | <a target=3D"_blank" href=3D"mailto:[email protected]?subject=3DPr=
ivate:%20Re:%20Re%3A%20%5Btestdrivendevelopment%5D%20How%20would%20you%20TD=
D%20a%20website%20front-end%3F">Reply To Sender</a>
  


|


  
    <a target=3D"_blank" href=3D"https://groups.io/mt/69387056/3268755">Mu=
te This Topic</a>
  

| <a href=3D"https://groups.io/g/testdrivendevelopment/post">New Topic</a>=
<br>



<br>

<a href=3D"https://groups.io/g/testdrivendevelopment/editsub/3268755">Your=
 Subscription</a> |
<a href=3D"mailto:[email protected]">Contact Group Own=
er</a> |

<a href=3D"https://groups.io/g/testdrivendevelopment/leave/6156322/7445563=
86/xyzzy">Unsubscribe</a>

 [[email protected]]<br>
<div width=3D"1" style=3D"color:white;clear:both">_._,_._,_</div>


--Apple-Mail=_04913F22-9081-46F5-AC27-5BADD4DA9A00--