Search code examples
tddxunittestcase

Test case for constructor as i have a filter logic


I have constructor where there is filter logic and wanna test it, though writing test case for constructor is not in practice i wanna have the code coverage , have tried many links but none are explaining about handling a constructor.

public Myclass {  
public Myclass(AnotherClass obj)    
{    
_key = obj.key;    
_ID = obj.ID;    
_CandidateMode = obj.CandidateMode;    
if(_CandidateMode == obj.CandidateMode.numeric     
{    
//Dosomething    
}    
else    
{    
//Do something with special character.    
}    
}    
} 

Solution

  • Definitely placing logic inside a constructor is a thing to avoid. Good you know that :-) In this particular case maybe the if could go into each of the public methods of MyClass, or maybe you could use polymorphism (create MyClass or MySpecialCharacterClass base on the AnotherClass object)?

    Anyway, to get to a straight answer: if you really must test constructor logic, do it like you would test any other method (in some languages it's just a static method called new, by the way).

    [TestMethod]
    public void is_constructed_with_numeric_candidate() {
      // Given
      AnotherClass obj = new AnotherClass { CandidateMode = CandidateMode.numeric };
      // When
      MyClass myClass = new MyClass(obj);
      // Then
      // assert myClass object state is correct for numeric candidate
      ...
    }
    
    [TestMethod]
    public void is_constructed_with_special_candidate() {
      // Given
      AnotherClass obj = new AnotherClass { CandidateMode = CandidateMode.special };
      // When
      MyClass myClass = new MyClass(obj);
      // Then
      // assert myClass object state is correct for special candidate
      ...
    }