我是新手,所以我真的不知道我是否正确行事。 我想测试的代码是:
public int[] IntArray(string text)
{
return text.Split(',').Select(x => int.Parse(x.Trim())).ToArray();
}
我已经完成的测试不完整,所以希望有人可以提供帮助:
[TestClass]
public class ContextHelperTests
{
public ContextHelper CreateTarget()
{
var context = new ContextHelper();
}
return new ContextHelper();
}
[TestMethod]
public void TestContextHelper()
{
// Arrange
var expectedResult = 12,3;
}
// Act
var values = context.Split(',');
int actualResult = values.Select(x => int.Parse(x)).ToArray();
// Assert
Assert.That(actualResult, Is.EqualTo(expectedResult));
答案 0 :(得分:3)
实施测试时,您不会复制要测试的代码,而是测试整个代码。
例如,如果您想测试IntArray
方法,只需要调用它并执行一些断言以确保它按预期工作:
var expectedResult = new int[] { 1, 2, 3 };
var result = whatever.IntArray("1,2,3");
Assert.AreEqual(3, result.Length);
Assert.AreEqual(expectedResult[0], result[0]);
Assert.AreEqual(expectedResult[1], result[1]);
Assert.AreEqual(expectedResult[2], result[2]);
答案 1 :(得分:2)
您不希望在测试代码中复制所有源代码逻辑..这没有任何意义。相反,因为你知道输入是什么,知道你的输出应该如何,然后只需指定它 - 然后确保它们是相等的
您的测试类应该看起来像这样:
[TestClass]
public class ContextHelperTests
{
private SomeClassWithThatMethod _instance;
private string _inputText = "123 , 324 , 4";
private int[] _expectedOutput = new int[] {123, 324, 4};
[TestInitialize]
public void Initialize()
{
_instance = new SomeClassWithThatMethod();
}
[TestMethod]
public void IntArray_ValidInput_3ItemsInOutput()
{
var response = _instance.IntArray(_inputText);
CollectionAssert.AreEqual(response, _expectedOutput);
}
}
只是为了它的乐趣 - 查看一个名为FluentAssertions的库 - 很棒的扩展方法,使所有Assert.
部分更具可读性和更清晰