做一个爱写测试的程序员
作者:网络转载 发布时间:[ 2013/7/1 14:08:05 ] 推荐标签:
自从掌握了单元测试的要领之后,经常写测试,做测试,也非常喜欢做单元测试。
现在把它公开给大家,分享这个Ip地址信息下载功能的测试代码:
[TestMethod]
public void IPLibraryTest()
{
string whole = "211.64.0-255.0-255";
IPRange ipRange = new IPRange(whole);
List<IPAddress> addresses = ipRange.GetAllIP() as List<IPAddress>;
DataTable table = new DataTable("Ip");
JavaScriptSerializer serializer = new JavaScriptSerializer();
string url = string.Empty, json = string.Empty;
Parallel.ForEach(addresses, (address) =>
{
url = string.Format("http://ip.taobao.com/service/getIpInfo.php?ip={0}", address.ToString());
json = string.Empty;
try
{
json = Convert.ToString(NetworkHelper.PostRequest(url));
}
catch (Exception)
{
}
Object obj2 = serializer.DeserializeObject(json);
if (string.IsNullOrWhiteSpace(json)||obj2 == null)
return;
Dictionary<String, Object> dictionary = (Dictionary<String, Object>)obj2;
foreach (KeyValuePair<string, object> valuePair in dictionary)
{
if (valuePair.Value.GetType() == typeof (Dictionary<string, object>))
{
Dictionary<String, Object> subdictionary = valuePair.Value as Dictionary<String, Object>;
lock (table)
{
if (table.Columns.Count == 0)
{
foreach (KeyValuePair<string, object> pair in subdictionary)
{
table.Columns.Add(pair.Key, typeof (string));
}
}
DataRow row = table.NewRow();
foreach (KeyValuePair<string, object> pair in subdictionary)
{
row[pair.Key] = pair.Value;
}
table.Rows.Add(row);
}
}
}
});
string databaseFile = @"H:DevelopmentSourceTestDatabase64IpLibrary.accdb";
OleDbHelper accessHelper = new OleDbHelper(databaseFile);
accessHelper.AppendData(table);
}
程序中的不合理的地方,欢迎批评指正。
三个工具的组合 Visual Studio + Resharper + Visual Source Safe,经过几年的积累,累积了大量的测试代码。
Visual Studio内置的MSTest本身好用,NUnit也可以,这是测试的基础工具,再配合Reshaprer的测试管理器,在方法前面点一个小按钮,即可以调试或是运行的方式开始测试,相当方便。后,累积的测试代码,直接提交到源代码管理工具中,备以后查验。
我们开发中经常遇到这样的情景,有一个小方法不知道是否正确,需要测试一下。不需要复杂的用户输入的功能,可以开一个控制台程序,执行测试,如用户输入复杂,则需要开一个Windows Forms程序。测试完成后,把可用的功能代码拷贝走,剩下的测试程序通常会扔掉。在没有学会MSTest之前,我经常这么做。等到以后发现有问题时,再回来来找当初的测试情景和代码,传递的参数数据,已经无从得知。

sales@spasvo.com