Re: Validation Exceptions, Localization & Unit Testing
Re: Validation Exceptions, Localization & Unit Testing
- Subject: Re: Validation Exceptions, Localization & Unit Testing
- From: Farrukh Ijaz <email@hidden>
- Date: Mon, 19 Dec 2011 06:29:47 +0300
Try reordering your application classpath and I guess moving Extensions Framework above will solve the problem. It happened to me a couple of times and I discovered it's related to loading the classes in specific order.
Farrukh
Henrique Prange <email@hidden> wrote:
>Hi Kevin,
>
>I'm not an expert on ERXValidation, but you're correct. The ERXLocalizer class has not been initialized properly. Unfortunately, WOUnit doesn't load the Properties file before the test execution as well as it doesn't provide means for the ERXLocalizer to initialize properly. As a workaround, you can manually load the Properties file and initialize the ERXLocalizer in a static method annotated with @BeforeClass.
>
>I've created two issues [1] [2] and will take a closer look at this requirement.
>
>[1]https://github.com/hprange/wounit/issues/24
>[2]https://github.com/hprange/wounit/issues/25
>
>Cheers,
>
>Henrique
>
>On 15/12/2011, at 17:15, Kevin Hinkson wrote:
>
>> Hi everyone,
>>
>> I have a model framework that I am currently testing using WOUnit. For the Account EO I have a unit test to ensure that the email attribute is valid before saving. That worked fine until I started changing the code to be localizable.
>>
>> I have a ValidationTemplate.strings in the framework under Resources -> English.lproj -> ValidationTemplate.strings
>>
>> Values in the template
>> {
>> "EmailFormatException" = "A valid <b>@@displayNameForProperty@@</b> is required.";
>> "Account.email.EmailFormatException" = "<b>@@displayNameForProperty@@</b> must be a valid email address.";
>> }
>>
>> Properties set:
>>
>> # Localization
>> er.extensions.ERXLocalizer.defaultLanguage=English
>> er.extensions.ERXLocalizer.fileNamesToWatch=("Localizable.strings","ValidationTemplate.strings")
>> er.extensions.ERXLocalizer.availableLanguages=(English)
>> er.extensions.ERXLocalizer.frameworkSearchPath=(app,ERDirectToWeb,ERExtensions)
>> er.extensions.ERXLocalizer.useLocalizedFormatters=true
>>
>>
>> Validation code:
>>
>> public String validateEmail(String newEmail) {
>> ERXValidationFactory factory = ERXValidationFactory.defaultFactory();
>>
>> if (!Account.isValidEmail(newEmail)) {
>> ERXValidationException exception = factory.createCustomException(this, Account.EMAIL_KEY, newEmail, "EmailFormatException");
>> throw exception;
>> }
>>
>> return newEmail;
>> }
>>
>> When I run the unit test for the Account EO I get a stack trace in the logs:
>>
>> - Undefined Validation Template entity "Account" property "EmailFormatException" type "CustomMethodException" target language "English"
>> java.lang.Throwable
>> at er.extensions.validation.ERXValidationFactory.templateForEntityPropertyType(ERXValidationFactory.java:554)
>> at er.extensions.validation.ERXValidationFactory.templateForException(ERXValidationFactory.java:448)
>> at er.extensions.validation.ERXValidationFactory.messageForException(ERXValidationFactory.java:394)
>> at er.extensions.validation.ERXValidationException.getMessage(ERXValidationException.java:133)
>> at com.wounit.matchers.CanBeSavedMatcher.describeTo(CanBeSavedMatcher.java:53)
>> at org.hamcrest.BaseDescription.appendDescriptionOf(BaseDescription.java:21)
>> at com.wounit.matchers.EOAssert.confirmImplementation(EOAssert.java:253)
>> at com.wounit.matchers.EOAssert.confirm(EOAssert.java:216)
>> at com.coralstone.envoy.modeltests.AccountTest.cannotSaveInvalidEmail(AccountTest.java:61)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:597)
>> at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>> at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>> at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>> at com.wounit.rules.AbstractEditingContextRule$1.evaluate(AbstractEditingContextRule.java:141)
>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
>> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>>
>>
>> It looks to me as if maybe the validation template cannot be found but I'm not certain what would cause that. Possibly there is something I need to load before running the test? Does anyone know what that might be?
>>
>> — Kevin Hinkson.
>>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list (email@hidden)
>> Help/Unsubscribe/Update your Subscription:
>>
>> This email sent to email@hidden
>
>
> _______________________________________________
>Do not post admin requests to the list. They will be ignored.
>Webobjects-dev mailing list (email@hidden)
>Help/Unsubscribe/Update your Subscription:
>
>This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden