MIT is compatible.

Raise JIRA calls for everything for now.

Stephen


Stephen Kestle wrote:
Is the MIT license compatible? I'm struggling to figure out whether it is or not... If it is, I'd like to have a go at revamping the CollectionUtils test with something more... concise (and tell, not ask). Should I create a ticket to include this jar etc, or email straight to you?

Cheers

Stephen

Stephen Colebourne wrote:
The collections tests were probably written before the concept of mocks became widely known. I have no problems with the use of mocks for testing in collections, provided that the license of the tool used is compatible with Apache Software Foundation restrictions (no GPL or LGPL).

Stephen


Stephen Kestle wrote:
Ok - the problem is that the end of the test is performing a type safety check. Something that the generic parameters will not allow. The collection under test should contain Collections of Strings, not Strings - that's the same as the closure. Therefore it's a compile error to add a string to the collection.

But apart from that - WHAT IS THAT TEST DOING???!!! It's absolutely horrible. It has no place in that class. (Sorry guys, I just hadn't looked at the tests for Commons Collections before this). This is why mock object libraries were created - to ensure that the method under test is the method under test. When testing CollectionUtils, we have no business using reflective Closure implementations, and then testing the bounds of those to ensure they work correctly.

If I were to write that test:

Closure<Number> testClosure = EasyMock.createMock(Closure.class);
Iterable<Long> col = new ArrayList<Long>();
col.add(1);
col.add(2);
testClosure.execute(1); //Record the expectation that '1' will be processed testClosure.execute(2); //Record the expectation that '2' will be processed
EasyMock.replay(testClosure);
CollectionUtils.forAllDo(col, testClosure);
EasyMock.verify(testClosure);

There - less than half the lines, clear about what it's testing, won't break in the future, unless the method under test breaks, etc, etc. If we were to go ahead with proxied mock based testing (which I would strongly recommend), then I have a (IMHO) really good helper test class for making it even easier than above, and I'd be able to show the really correct way of doing it, without being too much more verbose - lines 2-4 should be something like:

Iterator<Long> iterator = EasyMock.createMock(Iterator.class);
Iterable<Long> col= EasyMock.createMock(Iterable.class);
EasyMock.expect(col.iterator()).andReturn(iterator);
EasyMock.expect(iterator.next()).andReturn(1);
EasyMock.expect(iterator.next()).andReturn(2);

This would set up the exact way that we want CollectionUtils methods to work (which is what we want in THIS case), and would be extracted to a separate iterableSetUp() method.

So, can we import EasyMock as well as Junit4? Our tests should be far more like deterministic mathematical proofs than they are at the moment.



Stephen Smith wrote:
Hi,

Does anyone have any example JUnit 3.x test cases for testing compilation failures on generifying collections?

For example, the end of the current test case TestCollectionUtils#testForAllDo asserts that adding invoking CollectionUtils#forAllDo(Collection c, Closure cl) fails when cl is defined to accept Collection and c is defined to contain Strings. After generifying CollectionUtils#forAllDo(Collection<T> c, Closure<T> cl), the test case will no longer compile and I'd prefer to replace it with a JSE5 compatible assertion rather than delete it - does anyone have any thoughts on this?

Steve.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to