Fwd: Impressions from trying to write an own Engine

"Jens Schauder [email protected] [junit]" <[email protected]> Sun, 29 Nov 2015 19:41:39 +0100
Newsgroups gmane.comp.java.junit.user
Message-ID <CAE1X+MBo_5Jn_fqOju-NXfCjFRbM5V6qHH4=YUM0sAK1UAMKzg@mail.gmail.com>
--001a11418f3c6c07d00525b24614
Content-Type: text/plain; charset=UTF-8

Hi everybody,
after looking at the JUnit-Lambda prototype, I was a little disappointed
that there was no TestEngine allowing to register tests by calling a test
method.

So I decided to write my own engine. I failed miserably, which was probably
due to me being really tired after a great conference I attended. So take
my impressions with a grain of salt, but anyway here are they:


1. (good) the API is simple (few methods to implement)

2. Why is discoverTest of type void? I think it should really return some
kind of collection of Tests/ a TestPlanSpecification, instead of getting a
TestPlanSpecification passed in. The merging with other results of other
engines should be task of the launcher

3. What is an Engine Descriptor, and why does my engine gets one passed as
an argument??? My Engine really should know how to describe itself ... but
wait an EngineDescriptor is some kind of TestDescriptor??? Is my engine a
test? doesn't make sense to me. If it describes a test, then why has it an
attribute isTest, which returns false by default?

4. Why is there an execute method in a TestEngine? If a TestEngine is
something (possibly) provided by a third party, it should not execute
tests. It should register them (along with all necessary and possible meta
information) and the core of JUnit should execute them.

5. How is the ReflectionUtils supposed to work?  I tried
findAllClassesInPackage
and findAllClassesInClasspathRoot, but didn't to manage to get anything out
of them, except null.

6. As mentioned above, I'm too stupid (or was too tired) to make it work.
If somebody wants to take a look, the poor results are in
https://github.com/schauder/junit-lambda/tree/lambda-engine

kind regards
Jens

--001a11418f3c6c07d00525b24614
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable





<head>

<style type=3D"text/css">
<!--

/* start of attachment style */
       .ygrp-photo-title{
         clear: both;
         font-size: smaller;
         height: 15px;
         overflow: hidden;
         text-align: center;
         width: 75px;
       }
       div.ygrp-photo{
         background-position: center;
         background-repeat: no-repeat;
         background-color: white;
         border: 1px solid black;
         height: 62px;
         width: 62px;
       }

       div.photo-title=20
         a,
         div.photo-title a:active,
         div.photo-title a:hover,
         div.photo-title a:visited {
           text-decoration: none;=20
       }

       div.attach-table div.attach-row {
         clear: both;
       }

       div.attach-table div.attach-row div {
         float: left;
         /* margin: 2px;*/
       }

       p {
         clear: both;
         padding: 15px 0 3px 0;
	 overflow: hidden;
       }

       div.ygrp-file {
         width: 30px;
         valign: middle;
       }
       div.attach-table div.attach-row div div a {
         text-decoration: none;
       }

       div.attach-table div.attach-row div div span {
         font-weight: normal;
       }

       div.ygrp-file-title {
         font-weight: bold;
       }
 /* end of attachment style */
        -->
        </style>
        </head>
<html>
<head>
<style type=3D"text/css">
<!--
#ygrp-mkp {
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 10px 0;
  padding: 0 10px;
}

#ygrp-mkp hr {
  border: 1px solid #d8d8d8;
}

#ygrp-mkp #hd {
  color: #628c2a;
  font-size: 85%;
  font-weight: 700;
  line-height: 122%;
  margin: 10px 0;
}

#ygrp-mkp #ads {
  margin-bottom: 10px;
}

#ygrp-mkp .ad {
  padding: 0 0;
}

#ygrp-mkp .ad p {
  margin: 0;
}

#ygrp-mkp .ad a {
  color: #0000ff;
  text-decoration: none;
}
-->
</style>
</head>
<body>



<!-- |**|begin egp html banner|**| -->

<br><br>

<!-- |**|end egp html banner|**| -->


<div dir=3D"ltr"><div class=3D"gmail_quote"><div dir=3D"ltr"><div>Hi everyb=
ody,</div><div>after looking at the JUnit-Lambda prototype, I was a little =
disappointed that there was no TestEngine allowing to register tests by cal=
ling a test method.</div><div><br></div><div>So I decided to write my own e=
ngine. I failed miserably, which was probably due to me being really tired =
after a great conference I attended. So take my impressions with a grain of=
 salt, but anyway here are they:</div><div><br></div><div><br></div><div>1.=
 (good) the API is simple (few methods to implement)</div><div><br></div><d=
iv>2. Why is discoverTest of type void? I think it should really return som=
e kind of collection of Tests/ a TestPlanSpecification, instead of getting =
a TestPlanSpecification passed in. The merging with other results of other =
engines should be task of the launcher</div><div><br></div><div>3. What is =
an Engine Descriptor, and why does my engine gets one passed as an argument=
??? My Engine really should know how to describe itself ... but wait an Eng=
ineDescriptor is some kind of TestDescriptor??? Is my engine a test? doesn&=
#39;t make sense to me. If it describes a test, then why has it an attribut=
e isTest, which returns false by default?</div><div><br></div><div>4. Why i=
s there an execute method in a TestEngine? If a TestEngine is something (po=
ssibly) provided by a third party, it should not execute tests. It should r=
egister them (along with all necessary and possible meta information) and t=
he core of JUnit should execute them.</div><div><br></div><div>5. How is th=
e ReflectionUtils supposed to work?=C2=A0 I tried=C2=A0<span style=3D"color=
:rgb(0,0,0);font-family:Consolas;background-color:rgb(228,228,255)">findAll=
ClassesInPackage and=C2=A0</span><span style=3D"color:rgb(0,0,0);font-famil=
y:Consolas;background-color:rgb(228,228,255)">findAllClassesInClasspathRoot=
, but didn&#39;t to manage to get anything out of them, except null.</span>=
</div><div><br></div><div>6. As mentioned above, I&#39;m too stupid (or was=
 too tired) to make it work. If somebody wants to take a look, the poor res=
ults are in=C2=A0<a href=3D"https://github.com/schauder/junit-lambda/tree/l=
ambda-engine" target=3D"_blank">https://github.com/schauder/junit-lambda/tr=
ee/lambda-engine</a><br></div><div><br></div><div>kind regards</div><span c=
lass=3D"HOEnZb"><font color=3D"#888888"><div>Jens</div><div></div></font></=
span></div>
</div><br></div>




<!-- |**|begin egp html banner|**| -->

<br>


<br>

<!-- |**|end egp html banner|**| -->


<div width=3D"1" style=3D"color: white; clear: both;"/>__._,_.___</div>

=20=20=20=20=20=20
=20=20

=20=20=20=20
    <div id=3D"fromDMARC" style=3D"clear:both; margin-top: 10px;">
         <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; backgroun=
d-color:#E3E3E3;">
         Posted by: Jens Schauder &lt;[email protected]&gt;         =
<hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background-color:#=
E3E3E3;">
    </div>
<!-- Start Recommendations -->
<!-- End Recommendations -->



<!-- |**|begin egp html banner|**| -->

  <img src=3D"http://geo.yahoo.com/serv?s=3D97476590/grpId=3D2423328/grpspI=
d=3D1705006905/msgId=3D24732/stime=3D1448822501" width=3D"1" height=3D"1"> =
<br>

<!-- |**|end egp html banner|**| -->

=20=20
<!-- |**|begin egp html banner|**| -->

<br>



=20=20=20
=20=20=20=20=20
=20
        <!-- |**|begin egp html banner|**| -->
        <div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-fam=
ily: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

        <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-tr=
ansform: uppercase; "><a href=3D"https://groups.yahoo.com/neo/groups/junit/=
info;_ylc=3DX3oDMTJlbDBkbzh0BF9TAzk3MzU5NzE0BGdycElkAzI0MjMzMjgEZ3Jwc3BJZAM=
xNzA1MDA2OTA1BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ0ODgyMjUwMQ--" style=3D"tex=
t-decoration: none;">Visit Your Group</a></span>

     <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in=
line;">
            <li style=3D"border-right: 1px solid #000; font-weight: 700; di=
splay: inline; padding: 0 5px; margin-left: 0;">
      <span class=3D"cat"><a href=3D"https://groups.yahoo.com/neo/groups/ju=
nit/members/all;_ylc=3DX3oDMTJmbDRlYWJuBF9TAzk3MzU5NzE0BGdycElkAzI0MjMzMjgE=
Z3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0NDg4MjI1MDE-" s=
tyle=3D"text-decoration: none;">New Members</a></span>
      <span class=3D"ct" style=3D"color: #ff7900;">2</span>
    </li>
                                              </ul>
  </div>


<div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p=
x; padding: 0 2px 0 0; clear: both;">
  <a href=3D"https://groups.yahoo.com/neo;_ylc=3DX3oDMTJkdTR0OWVkBF9TAzk3ND=
c2NTkwBGdycElkAzI0MjMzMjgEZ3Jwc3BJZAMxNzA1MDA2OTA1BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNDQ4ODIyNTAx" style=3D"float: left;"><img src=3D"http://l.yimg.com/r=
u/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15"=
 width=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a>
  <div style=3D"color: #747575; float: right;"> &bull; <a href=3D"https://i=
nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio=
n: none;">Privacy</a> &bull; <a href=3D"mailto:junit-unsubscribe@yahoogroup=
s.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Unsubscribe</=
a> &bull; <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/terms/" sty=
le=3D"text-decoration: none;">Terms of Use</a> </div>
</div>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

=20=20=20


  <br>

<!-- |**|end egp html banner|**| -->


<div style=3D"color: white; clear: both;"/>__,_._,___</div>
</body>

</html>

--001a11418f3c6c07d00525b24614--