[ 
https://issues.apache.org/jira/browse/LUCENENET-127?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12620479#action_12620479
 ] 

Doug Sale commented on LUCENENET-127:
-------------------------------------

Lucene.Net.Analysis.TestStandardAnalyzer

Intermittent Test Failures

Failing Tests:
- TestDomainNames()
- TestDeprecatedAcronyms()

Symptoms:
1) all tests directly after a clean build
  - FAIL: TestDeprecatedAcronyms()
2) TestDeprecatedAcronyms() directly after a clean build
  - PASS
3) TestDomainNames() directly after a clean build:
  - PASS
4) TestDeprecatedAcronyms() directly after successful TestDomainNames()
  - FAIL
5) TestDeprecatedAcronyms() directly after successful TestDeprecatedAcronyms() 
  - PASS
6) TestDomainNames() directly after successful TestDeprecatedAcronyms()
  - PASS
7) TestDomainNames() directly after successful TestDomainNames()
  - FAIL

(Interestingly, I can only recreate cases 4 thru 7 by using the TestRunner 
testing harness - apparently it caches object instances between test 
invocations.  The standard NUnit test harness only diagnoses a failure in case 
#1.)

Prior to the last assertion in TestDomainNames(), the following code is invoked:

        ((StandardAnalyzer) a).SetReplaceInvalidAcronym(true);

This changes the behavior of the StandardAnalyzer, causing the test failures in 
subsequent tests.  'a' is a StandardAnalyzer instance that is an instance 
variable in TestStandardAnalyzer.

As I mentioned in my earlier post, the reason TestDeprecatedAcronyms() fails in 
Lucene.Net but not in Lucene is related to a key difference between NUnit and 
JUnit:  JUnit uses a new instance of the test class for every method invocation 
while NUnit uses a single instance.

The repercussions of this seemingly insignificant difference are that in NUnit, 
one test case can alter the execution environment of a subsequent test case.  
My prior solution was to create a StandardAnalyzer instance within 
TestDeprecatedAcronyms().  Another solution would be to reset the default state 
of StandardAnalyzer as the last statement in TestDomainNames():

        ((StandardAnalyzer) a).SetReplaceInvalidAcronym(false);

But, the prudent solution is to assign a new instance of StandardAnalyzer to 
'a' in a [SetUp] annotated method.  In fact, all test classes that are 
converted from Java/JUnit to C#/NUnit would be assured to be comparing apples 
to apples if they moved all instance variable initialization to  a [SetUp] 
annotated method that is invoked for every test case/method.

Said patch for TestStandardAnalyzer is inbound.

> broken test case: 
> Lucene.Net.Analysis.TestStandardAnalyzer.TestDeprecatedAcronyms()
> -----------------------------------------------------------------------------------
>
>                 Key: LUCENENET-127
>                 URL: https://issues.apache.org/jira/browse/LUCENENET-127
>             Project: Lucene.Net
>          Issue Type: Bug
>            Reporter: Doug Sale
>            Priority: Minor
>         Attachments: TestStandardAnalyzer.patch
>
>   Original Estimate: 0h
>  Remaining Estimate: 0h
>
> Test case TestDeprecatedAcronyms() fails when run with all unit tests in test 
> class TestStandardAnalyzer.cs but succeeds when run alone.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to