【问题标题】:Test case for constructor as i have a filter logic构造函数的测试用例,因为我有一个过滤器逻辑
【发布时间】:2023-04-03 01:27:02
【问题描述】:

我有构造函数,其中有过滤器逻辑并想对其进行测试,尽管实际上并没有为构造函数编写测试用例,但我想获得代码覆盖率,尝试了很多链接,但没有一个解释有关处理构造函数的链接。

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

【问题讨论】:

  • 如果你测试类的公共方法,你的构造函数无论如何都会被执行,这意味着构造函数将被测试覆盖。
  • 我已经测试了公共方法,构造函数初始化中有一些逻辑,我想单独测试!
  • 构造函数中的逻辑应该通过公共方法或属性进行测试。

标签: tdd xunit testcase


【解决方案1】:

一定要避免在构造函数中放置逻辑。很好,您知道 :-) 在这种特殊情况下,if 可能会进入MyClass 的每个公共方法,或者您可以使用多态性(基于AnotherClass 创建MyClassMySpecialCharacterClass对象)?

无论如何,要得到一个直接的答案:如果您真的必须测试构造函数逻辑,请像测试任何其他方法一样进行测试(顺便说一下,在某些语言中,它只是一个名为 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
  ...
}

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    相关资源
    最近更新 更多