最近向我介绍了测试驱动开发。但是,我很难理解它。给出了以下单元测试:
public void Setup()
{
invoicePosition = new InvoicePosition{
Customer = new Customer(),
ItemIdentifier = 0,
ItemName = "SpringRoll",
Orders = 2,
SingleUnitPrice = 3.50m
};
pairs = new KeywordPair[]{
new KeywordPair(new Keyword("ItemNumber"),invoicePosition.ItemIdentifier.ToString()),
new KeywordPair(new Keyword("ItemName"), invoicePosition.ItemName),
new KeywordPair(new Keyword("CustomerName"), invoicePosition.Customer.Name),
new KeywordPair(new Keyword("AmountOrdered"), invoicePosition.Orders.ToString()),
new KeywordPair(new Keyword("NetPrice"), invoicePosition.SingleUnitPrice.ToString())
};
}
[Test]
public void Invoice_CreateOrderOrderedInput_Valid(){
var invoice = InvoicePosition.CreateFromPairs(pairs);
Assert.AreEqual(invoicePosition.ItemIdentifier, invoice.ItemIdentifier);
Assert.AreEqual(invoicePosition.ItemName.GetType(), invoice.ItemName.GetType());
Assert.AreEqual(invoicePosition.Customer.Name, invoice.Customer.Name);
Assert.AreEqual(invoicePosition.Orders, invoice.Orders);
Assert.AreEqual(invoicePosition.SingleUnitPrice, invoice.SingleUnitPrice);
}
请注意,关键字和关键字结构如下:
public struct Keyword
{
private string keyword;
private KeywordTypes type;
public Keyword(string keyword, KeywordTypes Type = KeywordTypes.String){
this.keyword = keyword;
this.type = Type;
}
public struct KeywordPair
{
public Keyword Key;
public string Value;
public KeywordPair(Keyword key, string value)
{
this.Key = key;
this.Value = value;
}
}
现在,我已经为先前的单元测试编写了以下项目:命名空间SimpleShop
public class InvoicePosition
{
public uint ItemIdentifier = 0;
public string ItemName = "";
public uint Orders = 0;
public decimal SingleUnitPrice = 0.0m;
public Customer Customer;
public KeywordPair[] Pairs = new KeywordPair[0];
public static InvoicePosition CreateFromPairs(KeywordPair[] pairs)
{
var invoice = new InvoicePosition();
invoice.Pairs = pairs;
return invoice;
}
}
我需要编写说明错误序列化的代码。例如,如果将配对引入程序,如下所示:
pairs[3] = new KeywordPair(new Keyword("AmountOrdered"), "+%&/" + invoicePosition.Orders.ToString());
pairs[4] = new KeywordPair(new Keyword("NetPrice"), invoicePosition.SingleUnitPrice.ToString() +
"%&öä/");
谢谢,任何帮助都将非常有用。
给出测试Invoice_CreateOrderOrderedInput_Valid
,OP中建议的InvoicePosition
未通过测试。通过使用Visual Studio的各种重构工具,这样的事情就是可能工作的最简单的事情:
public class InvoicePosition
{
public Customer Customer { get; set; }
public int ItemIdentifier { get; set; }
public string ItemName { get; set; }
public int Orders { get; set; }
public decimal SingleUnitPrice { get; set; }
public static InvoicePosition CreateFromPairs(KeywordPair[] pairs)
{
return new InvoicePosition
{
ItemName = "",
Customer = new Customer(),
Orders = 2,
SingleUnitPrice = 3.5m
};
}
}
CreateFromPairs
实现显然不是完整或正确的实现,但它通过了所有测试。 TDD面临的挑战是弄清楚接下来要编写哪个测试。
TDD最有效,如果您可以以尽可能小的步长前进。您可能需要考虑Transformation Priority Premise。您首先要解决不正确实施的哪一部分?
也许您不满意ItemName
被硬编码为空字符串。您如何编写新的测试来鼓励您使实现更通用?
我将编写另一个测试,以使第一个测试的所有内容保持不变,except ItemName
值。
Setup
当前的测试结构方式很不方便。我建议您改写parametrised tests。