Keyboard Shortcuts
ctrl + shift + ? :
Show all keyboard shortcuts
ctrl + g :
Navigate to a group
ctrl + shift + f :
Find
ctrl + / :
Quick actions
esc to dismiss
Likes
- Testdrivendevelopment
- Messages
Search
Re: [TDD] Arabic to Roman Numeral kata with commentary
Hi Corey,
Your katacast is fantastic, it shows the power of TDD(combined with TPP) really well. I'm really?grateful?for your contribution towards the IT craftsmanship! Keep up the good work! Br, Alpar Gabos ________________________________ From: Corey Haines <coreyhaines@...> To: testdrivendevelopment <testdrivendevelopment@...> Sent: Tuesday, December 18, 2012 2:21 PM Subject: [TDD] Arabic to Roman Numeral kata with commentary ? Hi, All, I recently posted a katacast of the arabic to roman numeral conversion kata with an audio commentary track over it. It is heavy TDD, plus uses bits of the transformation priority premise. Would love to hear any feedback from the list. Thanks! -Corey Haines [Non-text portions of this message have been removed] |
Re: [TDD] Sharable Examples of Good Testing
I think Fitnesse is wrought in a TestDriven fashion:
toggle quoted message
Show quoted text
On Tue, 18 Dec 2012 14:56:11 -0000, john_s_ryan wrote:
I'm looking for some examples of software programs that are good |
Re: [TDD] Sharable Examples of Good Testing
Hello!
If you want a repository with good practices, maybe you should read the "Clean Code" (by Robert C. Martin) and other books like that. I know a repository with the same kata resolved by loads of people. Some of them has very bad code and some, very good solutions. There is no optimal solution... only many good ones: It has some pages written in Spanish, but the main part is written in English and I think it can be understood. I hope that helps! 2012/12/18 Angel Java Lopez <ajlopez2000@...> Well, I don't know if there are the more appropriate examples, but I -- Miguel ?ngel Garc¨ªa Mart¨ªnez Mail <miguelangel.garcia@...> | Twitter <> | LinkedIn <> | about.me <> |
Re: [TDD] Sharable Examples of Good Testing
Well, I don't know if there are the more appropriate examples, but I
usually made atomic commits per tests in my GitHub projects: (except the PHP ones ;*) See the commit log A simple example, Javascript/NodeJs using require('assert') Turing Machine Cellular Automata, then Game of Life Finite Groups in Java, using JUnit/Eclipse A bit more elaborated, but with huge commit history Python interpreter in C# (WIP) Smalltalk VM in C# same in Java C#-like scripting language Using QUnit Angel "Java" Lopez @ajlopez On Tue, Dec 18, 2012 at 11:56 AM, john_s_ryan <jtigger@...>wrote: ** [Non-text portions of this message have been removed] |
Re: [TDD] Re: Arabic to Roman Numeral kata with commentary
Thanks so much for the kind words, John,
On Tue, Dec 18, 2012 at 9:53 AM, john_s_ryan <jtigger@...>wrote: **Thanks. In these, I try to take a "let me show you how I do it" rather than a "you should do it this way." I don't think there is a lot of value in trying to convince others, but rather just to show that this is a path they can choose that is effective for a lot of people. Perhaps it gives people a taste that motivates them to look more at it. Thanks. I assume you mean around using VIM? I have spent the past few years honing them. There is still a lot to learn, but I've got the minute-to-minute editing down fairly nicely. Actually, the non-commentary version of the kata is more than a minute longer than it takes me when I'm going full speed. It usually takes me between 6:30 and 6:45 to do it. Yeah. I was happy to see it come in around that amount of time. I wouldn't want it to get much longer, as it suddenly becomes something to schedule. 15 minutes tends to be a good amount where you can sit down and watch during a break. Good stuff!Thanks again. I'm looking forward to potentially doing these periodically, especially alongside my coming video series that will be like this except for a whole web app. Cheers! -Corey
[Non-text portions of this message have been removed] |
Re: Arabic to Roman Numeral kata with commentary
john_s_ryan
First off, thank you for putting that katacast together.
toggle quoted message
Show quoted text
I really appreciate your delivery style. There's zero ego-speak to overcome, you're just sharing peer-to-peer with your fellow craftsmen. This is very pragmatic: when trying to learn something, pompous tone or outright arrogance is noise. Yours is a bright clear signal. Thank you for that. Your solution has a certain elegance. As Matthew May points out, elegance is that simplicity that is earned by doing the hard work of intentionally wading through the complexity. Just as important as your use of Uncle Bob's Transformations in priority, is your repertoire of chops. I wonder if that's worth giving a little attention to? What we talk about is implicitly more important, what we don't talk about is implicitly relatively less important. ~15 mins is a perfect-sized morsel. There's enough to chew on here, for most, that it's a great time to take a break. Finally, your taking the time to do at least two passes really increases the value density as well. There's something to be said when the listener isn't wanting to complete your sentences because you're multitasking and a bit slow on clearly articulating what you're doing while you're doing it. Good stuff! --- In testdrivendevelopment@..., Corey Haines wrote:
Hi, All, I recently posted a katacast of the arabic to roman numeral conversion kata with an audio commentary track over it. It is heavy TDD, plus uses bits of the transformation priority premise. Would love to hear any feedback from the list. Thanks! -Corey Haines [Non-text portions of this message have been removed] |
Arabic to Roman Numeral kata with commentary
Hi, All,
I recently posted a katacast of the arabic to roman numeral conversion kata with an audio commentary track over it. It is heavy TDD, plus uses bits of the transformation priority premise. Would love to hear any feedback from the list. Thanks! -Corey Haines |
[TDD] Re: driving
Oddly enough, I think it answered his question.
toggle quoted message
Show quoted text
Really; I had no idea. I used google. --- Dave Rooney <daverooneyca@...> wrote: LOL!! On 12-11-12 4:20 PM, JeffGrigg wrote:;-> --- "jack hirst" <hudsocat@> wrote:what is a cpc certificate and what are the rules anyone know |
TDD rowFixture test returns an IllegalArgumentException on a reflection mismatch
I have the following setup:
rhel55, jdk 170, eclipse juno, fitnesse. I am new to Fitnesse and I am aware I need training and I am busy ramping myself up reading through 70% of Fit for Development Software. I was hoping someone in this forum would give me some advice as well on how to resolve the coding issue I have resulting in the stacktrace in the Fitnesse result : net.qaautomation.fitnesse.fixtures.DcrSrcListarea relative path java.lang.IllegalArgumentException: Can not set com.interwoven.cssdk.filesys.CSAreaRelativePath field com.interwoven.proserv.dcr.DcrList.areaRelativePath to com.interwoven.cssdk.filesys.CSAreaRelativePath at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Uns\ afeFieldAccessorImpl.java:164) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Uns\ afeFieldAccessorImpl.java:168) at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.ja\ va:55) at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorI\ mpl.java:36) at java.lang.reflect.Field.get(Field.java:372) at fit.TypeAdapter.get(TypeAdapter.java:94) at fit.RowFixture.buildCells(RowFixture.java:212) at fit.RowFixture.buildRows(RowFixture.java:191) at fit.RowFixture.doRows(RowFixture.java:32) at fit.Fixture.doTable(Fixture.java:153) at fit.Fixture.interpretTables(Fixture.java:99) at fit.Fixture.doTables(Fixture.java:79) at fit.FitServer.process(FitServer.java:81) at fit.FitServer.run(FitServer.java:56) at fit.FitServer.main(FitServer.java:41)surplus java.lang.IllegalArgumentException: Can not set com.interwoven.cssdk.filesys.CSAreaRelativePath field com.interwoven.proserv.dcr.DcrList.areaRelativePath to com.interwoven.cssdk.filesys.CSAreaRelativePath at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Uns\ afeFieldAccessorImpl.java:164) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Uns\ afeFieldAccessorImpl.java:168) at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.ja\ va:55) at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorI\ mpl.java:36) at java.lang.reflect.Field.get(Field.java:372) at fit.TypeAdapter.get(TypeAdapter.java:94) at fit.RowFixture.buildCells(RowFixture.java:212) at fit.RowFixture.buildRows(RowFixture.java:191) at fit.RowFixture.doRows(RowFixture.java:32) at fit.Fixture.doTable(Fixture.java:153) at fit.Fixture.interpretTables(Fixture.java:99) at fit.Fixture.doTables(Fixture.java:79) at fit.FitServer.process(FitServer.java:81) at fit.FitServer.run(FitServer.java:56) at fit.FitServer.main(FitServer.java:41)surplus java.lang.IllegalArgumentException: Can not set com.interwoven.cssdk.filesys.CSAreaRelativePath field com.interwoven.proserv.dcr.DcrList.areaRelativePath to com.interwoven.cssdk.filesys.CSAreaRelativePath at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Uns\ afeFieldAccessorImpl.java:164) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Uns\ afeFieldAccessorImpl.java:168) at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.ja\ va:55) at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorI\ mpl.java:36) at java.lang.reflect.Field.get(Field.java:372) at fit.TypeAdapter.get(TypeAdapter.java:94) at fit.RowFixture.buildCells(RowFixture.java:212) at fit.RowFixture.buildRows(RowFixture.java:191) at fit.RowFixture.doRows(RowFixture.java:32) at fit.Fixture.doTable(Fixture.java:153) at fit.Fixture.interpretTables(Fixture.java:99) at fit.Fixture.doTables(Fixture.java:79) at fit.FitServer.process(FitServer.java:81) at fit.FitServer.run(FitServer.java:56) at fit.FitServer.main(FitServer.java:41)surplus I have setup a rowFixture against a HP Autonomy TeamSite application and CSAreaRelativePath is an object that returns a path to an xml file in the CMS repository. The objective of the test is to get a list of all the assets in an area. If I set the field in DcrList areaRelativePath to String and refactor the code to get String objects then Reflection still does not really accept the objects from DcrList and DcrSrcList to be the same. I have looked at this for a week now and i am reading the book Fit for Developing Software - Framework for Integrated Tests from Rick Mugridge and Ward Cunningham which is getting me very far, but I need some further help to get me on the right track. If I make a static field of CSAreaRelativePath in DcrList.java then the test says: net.qaautomation.fitnesse.fixtures.DcrSrcListarea relative pathnull surplusnull surplusnull surplusnull surplus The Fitnesse test configuration and code look like this. Please let me know if you need logs, or anything else: |!-net.qaautomation.fitnesse.fixtures.DcrSrcList-!||''area relative path''| The DcrSrcList java looks like this: public class DcrSrcList extends fit.RowFixture { private static Logger log = LogManager.getLogger(DcrSrcList.class); @Override public Object[] query() throws Exception { DcrList dcrlist = new DcrList(null); List<CSAreaRelativePath> arearelativepathList = new ArrayList<CSAreaRelativePath>(); for (Iterator<?> it = dcrlist.getDcrList(); it.hasNext();){ CSAreaRelativePath areaRelativePath = (CSAreaRelativePath) it.next(); log.debug("DcrSrcList path: " + areaRelativePath.toString()); arearelativepathList.add(areaRelativePath); } for (Iterator<CSAreaRelativePath> iterator = arearelativepathList.iterator(); iterator .hasNext();) { CSAreaRelativePath string = (CSAreaRelativePath) iterator.next(); log.debug("show list entry: " + string); } return arearelativepathList.toArray(); } @Override public Class<?> getTargetClass() { // TODO Auto-generated method stub return DcrList.class; } } The DcrList.java looks like this: package com.interwoven.proserv.dcr; import java.util.ArrayList;import java.util.Iterator;import org.apache.log4j.LogManager;import org.apache.log4j.Logger;import com.interwoven.proserv.common.IOHelper;import com.interwoven.proserv.common.MasterFactory;import com.interwoven.proserv.common.Constants;import com.interwoven.cssdk.filesys.CSSortKey;import com.interwoven.cssdk.common.CSClient;import com.interwoven.cssdk.filesys.CSBranch;import com.interwoven.cssdk.filesys.CSAreaRelativePath;import com.interwoven.cssdk.filesys.CSDir;import com.interwoven.cssdk.filesys.CSFile;import com.interwoven.cssdk.filesys.CSFileKindMask;import com.interwoven.cssdk.filesys.CSSimpleFile;import com.interwoven.cssdk.filesys.CSVPath;import com.interwoven.cssdk.filesys.CSWorkarea;import com.interwoven.proserv.common.TSHelper;import org.apache.commons.lang.StringUtils; import org.apache.commons.collections.CollectionUtils; /** * @name AppendHTMLTagToBlockQuote * @description Class which returns a list of TeamSite Data Content Records * @author arnout.cator * @returns List<SimpleFile> */ public class DcrList { private static Logger log = LogManager.getLogger(DcrList.class); private CSSimpleFile dcr; private ArrayList<CSAreaRelativePath> dcrList; private CSClient master; private CSVPath path; private static String excludeRegex = IOHelper.getString("excludeRegex"); //gets the string from master.properties private ArrayList<CSAreaRelativePath> allFiles ; private CSAreaRelativePath[] areaRelativePathArray; public CSAreaRelativePath areaRelativePath; private String fileKind; /** * Constructor with path field * @param areaRelativePath */ public DcrList(CSAreaRelativePath areaRelativePath) { this.areaRelativePath = areaRelativePath; } public Iterator getDcrList() throws Exception { //get the work area //get all DCRs and stick them in the List log.debug(": getDcrList() method start"); CSClient master = MasterFactory.getMasterClient(); String vpath = "/default/main/component-guide"; CSVPath csvpath = new CSVPath(vpath); log.debug(": getDcrList() csvpath: " + csvpath.toString()); CSBranch branch = master.getBranch(csvpath, true); log.debug(": getDcrList() branch: " + branch.getKind()); CSWorkarea[] workareas = branch.getWorkareas(); allFiles = new ArrayList<CSAreaRelativePath>(); for (int i = 0; i < workareas.length; i++) { CSWorkarea csWorkarea = workareas[i]; CSSortKey[] sortArray = new CSSortKey[1]; sortArray[0] = new CSSortKey(CSSortKey.NAME, true); Iterator<?> iterator = csWorkarea.getRootDir().getFiles(CSFileKindMask.SIMPLEFILE | CSFileKindMask.DIR, sortArray, CSFileKindMask.SIMPLEFILE | CSFileKindMask.DIR, null, 0, -1, true); log.debug("DcrList: About to display the workarea"); while (iterator.hasNext()) { CSFile file = (CSFile) iterator.next(); log.debug("DcrList Substring: " + file.getVPath().toString().replaceAll("//RH55WS732/default/main/componen\ t-guide/WORKAREA/shared/", "")); CSAreaRelativePath path = new CSAreaRelativePath(file.getVPath().toString().replaceAll("//RH55WS732/de\ fault/main/component-guide/WORKAREA/shared/", "")); allFiles.add(path); areaRelativePathArray = new CSAreaRelativePath[allFiles.size()] ; log.debug("DcrList adding path to areaRelativePath array size: " + areaRelativePathArray.length); } log.debug("DcrList final ArrayList allFiles size: " + allFiles.size()); } dcrList = allFiles; log.debug("DcrList size: " + dcrList.size()); return dcrList.iterator(); } public void setDcrList(ArrayList<CSAreaRelativePath> dcrList) { this.dcrList = dcrList; } /** * @return the areaRelativePath */ public CSAreaRelativePath getAreaRelativePath() { return areaRelativePath; } /** * @param areaRelativePath the areaRelativePath to set */ public void setAreaRelativePath(CSAreaRelativePath areaRelativePath) { this.areaRelativePath = areaRelativePath; }} |
Re: [TDD] Re: driving
LOL!!
toggle quoted message
Show quoted text
On 12-11-12 4:20 PM, JeffGrigg wrote:
;->--- "jack hirst" <hudsocat@...> wrote:what is a cpc certificate and what are the rules anyone know |
[ANN] Typemock releases a new version of Isolator, including a FREE version
typemock
* Posted with permission of the moderator *
Unit testing is a key element for any software developer, development team, or business. With proper unit testing, companies can reduce the cost of software defects while maintaining code quality and allowing for faster time-to-market. Typemock is committed to making unit testing easier and more accessible to developers and organizations and also ensure that individual programmers can use professional tools at home and in their own personal projects. Last month, Typemock released new packaging and pricing suitable for home and individual developers as well as those working in organizations and large enterprises. Typemock Isolator Basic - The basic package is a FREE unit testing framework, for developers without legacy code to test, which provides basic mocking functionality along with the smartrunner and coverage indicator features only. With Isolator Basic anyone with green field projects can unit test and engage in Test Driven Development (TDD) and get great design. Download it now: <> Typemock Isolator Essential - The essential package adds full mocking capabilities for developers that are committed to Test Driven Development (TDD) and unit testing. It ensures high code quality and coverage, even for legacy code, in all of .NET, including SharePoint, ASP.NET and ASP.NET MVC, and C#. Typemock Isolator Complete - The complete unit testing package offers the most advanced functionality available for teams where quality is critical for their business. This comprehensive mocking framework includes the autocompletion tool as well as productivity metrics for real ROI tracking and an advanced ASP.NET and ASP.NET MVC test simulator. Get it now. <> What do you think? Do you currently unit test? What is your need in a unit testing framework both for home/personal projects and in your workplace? |
Re: [TDD] Test Coverage Tool
Amir Kolsky
Thanks for all the replies, folks.
From: testdrivendevelopment@... [mailto:testdrivendevelopment@...] On Behalf Of Esko Luontola Sent: Friday, October 19, 2012 12:17 PM To: testdrivendevelopment@... Subject: Re: [TDD] Test Coverage Tool Joseph Yao wrote on 19.10.2012 8:43: I will recommend pitest for Java mutation test.Me too. PIT is the only most user friendly and useful mutation testing tool that I know of. Add the configuration to your Maven POM and it just works. Here's the URL: As an example of what the reports look like in real use, checkout from GitHub, run the command "mvn clean verify -P coverage-report" and look at the reports in /*/target/pit-reports directories. -- Esko Luontola www.orfjackal.net [Non-text portions of this message have been removed] |
Re: [TDD] Test Coverage Tool
Joseph Yao wrote on 19.10.2012 8:43:
I will recommend pitest for Java mutation test.Me too. PIT is the only most user friendly and useful mutation testing tool that I know of. Add the configuration to your Maven POM and it just works. Here's the URL: As an example of what the reports look like in real use, checkout from GitHub, run the command "mvn clean verify -P coverage-report" and look at the reports in /*/target/pit-reports directories. -- Esko Luontola www.orfjackal.net |
Re: [TDD] Test Coverage Tool
On Fri, Oct 19, 2012 at 2:43 AM, Joseph Yao <joseph.yao.ruozhou@...>
wrote: **+1 -- Abra?os, ´³´Ç²õ³Ü¨¦ On Fri, Oct 19, 2012 at 2:43 AM, Joseph Yao <joseph.yao.ruozhou@...>wrote: ** |
to navigate to use esc to dismiss