using System;
using System.Collections.Generic;
using System.Text;
[Serializable]
public class ColumnDataField
{
#region Fields
private int _columnIndex;
private string _dataFields;
#endregion Fields
#region Properties
/// <summary>
/// Column index
/// </summary>
public int ColumnIndex
{
get { return _columnIndex; }
set { _columnIndex = value; }
}
/// <summary>
/// Data fields
/// </summary>
public string DataFields
{
get { return _dataFields; }
set { _dataFields = value; }
}
/// <summary>
/// Convert DataFields string to data field list
/// </summary>
internal List<String> DataFieldList
{
get
{
if (string.IsNullOrWhiteSpace(DataFields)) return new List<String>();
string[] _array = DataFields.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
List<String> _fields = new List<String>(_array);
for (int _i = _fields.Count - 1; _i >= 0; _i--)
{
_fields[_i] = _fields[_i].Trim();
if (string.IsNullOrWhiteSpace(_fields[_i])) _fields.RemoveAt(_i);
}
return _fields;
}
set
{
StringBuilder _buffer = new StringBuilder();
foreach (string _field in value)
{
if (_buffer.Length > 0) _buffer.Append(",");
_buffer.Append(_field);
}
DataFields = _buffer.ToString();
}
}
#endregion Properties
}
}
我是C#的实习单元,所以对我很轻松。
我的其他项目没有太多问题,但我似乎无法弄清楚我是如何对内部列表进行单元测试的。
这是我目前为单元测试所用的代码:
[TestMethod]
public void DataFields_Test()
{
ColumnDataField questionText = new ColumnDataField();
questionText.DataFields = "test";
string expected = "test";
string actual = questionText.DataFields;
Assert.AreEqual(expected, actual);
}
因此,它将运行DataFields属性,但除此之外,它不会覆盖任何其他代码。我一直在网上搜索几天试图找出最好的方法来解决这个问题。我不需要被告知确切的做什么,但我会非常感谢指导。
答案 0 :(得分:4)
选项#0:向老板咨询他们希望如何测试内部方法。
选项#1:将InternalsVisibleTo添加到测试中的程序集并直接调用DataFieldList
。
[assembly:InternalsVisibleTo("YourTestAssemblyName")]
选项#2:测试调用内部属性的东西,以便访问结果。
选项#3:不要测试内部属性/字段/方法/类/等。
我确信还有更多选择......
选项#可能不应该:您可以使用反射“找到”内部属性,但您可能不应该这样做。
另外,您可以大大简化未经测试的属性中的代码:
//.Net 4
get
{
var cleansed = DataFields.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(df => df.Trim())
.Where(str => !string.IsNullOrWhitespace(str));
return new List<string>(cleansed);
}
set
{
DataFields = string.Join(",", value);
}