下面的代码存在于没有构造函数的实例类中,我不知道从哪里开始为它编写单元测试。
E.g价格是“2/9”所以secondPart是9 也是_random是Random类的对象
public string RefreshPrice(string price, out bool isUpOrDown, out bool isChanged)
{
if (string.IsNullOrEmpty(price))
{
isUpOrDown = false;
isChanged = false;
return price;
}
int secondPart;
string[] priceParts = price.Split('/');
int newPrice = 0;
if(int.TryParse(priceParts[1], out secondPart))
{
newPrice = secondPart >= 2 ? _random.Next(2, 20) : 2;
}
isUpOrDown = (newPrice > secondPart);
isChanged = (newPrice != secondPart);
secondPart = newPrice;
return string.Format("{0}/{1}", priceParts[0], secondPart);
}
答案 0 :(得分:2)
没有构造函数的实例类
所以这个班级将有一个默认的ctor:
Legacy legacyUnderTest = new Legacy();
如果未在默认ctor中设置_random
,则应创建辅助方法getLegacyUnderTest
以设置_random,无论是在生产中如何设置,还是查看this stack overflow answer在使用PrivateObject的测试期间访问私有。
private Legacy getLegacyUnderTest()
{
Legacy result = new Legacy();
//set _random however it is set in production for the general need of your test
return result;
}
由于它们是out
,因此您需要在测试的安排步骤中声明您的bool
标志,然后您就可以了:
[TestMethod]
public void RefreshPrice_EmptyPriceIsNotUpDownIsNotChange_ReturnsInitalPrice()
{
//Arrange
Legacy legacyUnderTest = new this.getLegacyUnderTest();
bool isUpDown = false;
bool isChange = false;
string initialPrice = string.Empty;
//Act
string result = legacyUnderTest.RefreshPrice(initalPrice, isUpDown, isChange);
//Assert
Debug.IsEqual(initalPrice, result);
}
现在(在解决了我不可避免地通过在我面前编写没有VS的片段而解决的问题)之后,您只需要更改isUpDown
,isChange
和{{1}的值覆盖你需要测试的所有可能性,你应该做得很好。
这应该是初始价格(有效,空,空和无效格式)的不同格式,以及这些标志的不同真/假组合。