views:

59

answers:

1

Hi, I'm trying out Pharo's Phexample and I like it, but it feels clumsy to have half my unit tests in SUnit and the other half in Phexample. Does Phexample have like an import feature for my existing tests?

+2  A: 

Concerning the expectation matchers, there is a series of rewrite rules on the class side of PhexMatcher. This screencast explains how to use RB's rewrite engine: Code Critics in OB (OB Screencast 3).

First use these rules

RBParseTreeRewriter new
 replace: 'self assert: [ `@expression ]' with: 'self assert: `@expression';
 replace: 'self deny: `@expression' with: 'self assert: `@expression not';
 yourself.

Then use these rules

RBParseTreeRewriter new
 replace: 'self assert: `@value = `@expected' with: '`@value should = `@expected';
 replace: 'self assert: `@value ~= `@expected' with: '`@value should not = `@expected';
 replace: 'self assert: `@value > `@expected' with: '`@value should > `@expected';
 replace: 'self assert: `@value < `@expected' with: '`@value should < `@expected';
 replace: 'self assert: `@value >= `@expected' with: '`@value should >= `@expected';
 replace: 'self assert: `@value <= `@expected' with: '`@value should <= `@expected';
 replace: 'self assert: (`@value isKindOf: `@type)' with: '`@value should beKindOf: `@type';
 replace: 'self assert: `@expression isNil' with: '`@expression should be isNil';
 replace: 'self assert: `@expression notNil' with: '`@expression should be notNil';
 replace: 'self assert: `@expression `test not' with: '`@expression should not be `test'
  when: [:node | node arguments first receiver selector matchesRegex: '(is|has|not).+|atEnd' ];
 replace: 'self assert: `@expression `test' with: '`@expression should be `test'
  when: [:node | node arguments first selector matchesRegex: '(is|has|not).+|atEnd' ];
 replace: 'self assert: (`@collection includes: `@element) not' with: '`@collection should not be includes: `@element';
 replace: 'self assert: (`@collection includes: `@element)' with: '`@collection should be includes: `@element';
 yourself.

Concerning the introduction of dependencies between test, you have to rewrite your tests by Hand. For JExample there is JUnit2JExample but alas there is not automagic migration for Smalltalk (yet).


PS: if you are using the latest Pharo image you must use OB and revert the OB-Refactory package to get scoped rewrite rules working. Just execute

SystemBrowser default: OBSystemBrowserAdaptor.
Gofer new
 wiresong: 'ob';
 addPackage: 'OB-Refactory';
 revert
Adrian