Тестовый пример для конструктора, так как у меня есть логика фильтра - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть конструктор, в котором есть логика фильтра, и я хочу его протестировать, хотя написание тестового примера для конструктора на практике не требуется. Я хочу получить покрытие кода, перепробовал много ссылок, но ни одна из них не объясняет работу с конструктором.

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.    
}    
}    
} 

1 Ответ

0 голосов
/ 30 апреля 2018

Определенно размещение логики внутри конструктора - это то, чего следует избегать. Хорошо, что вы знаете, что :-) В данном конкретном случае, возможно, if мог бы войти в каждый из открытых методов MyClass, или, возможно, вы могли бы использовать полиморфизм (создать MyClass или MySpecialCharacterClass базу на AnotherClass объект)?

В любом случае, чтобы получить прямой ответ: если вам действительно нужно тестировать логику конструктора, делайте это так, как если бы вы тестировали любой другой метод (кстати, в некоторых языках это просто статический метод с именем new).

[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
  ...
}
...