Tôi có chữ ký phương thức này: List<ITMData> Parse(string[] lines)
Làm cách nào để kiểm tra hiệu quả trình phân tích cú pháp tệp phẳng có độ dài cố định bằng MSpec?
ITMData
có 35 thuộc tính.
Làm thế nào để bạn hiệu quả kiểm tra trình phân tích cú pháp này?
Câu hỏi:
- Tôi có nên tải toàn bộ tập tin (Tôi có thể sử dụng System.IO)?
- Tôi có nên đặt một dòng từ tệp vào hằng số chuỗi không?
- Tôi có nên kiểm tra một hoặc nhiều dòng
- Tôi có nên kiểm tra từng thuộc tính của ITMData hoặc tôi có nên thử nghiệm toàn bộ đối tượng không?
- Còn việc đặt tên cho thử nghiệm của tôi thì sao?
EDIT
Tôi đã thay đổi chữ ký phương pháp để ITMData Parse(string line)
.
Mã kiểm tra:
[Subject(typeof(ITMFileParser))]
public class When_parsing_from_index_59_to_79
{
private const string Line = ".........";
private static ITMFileParser _parser;
private static ITMData _data;
private Establish context =() => { _parser = new ITMFileParser(); };
private Because of =() => { _data = _parser.Parse(Line); };
private It should_get_fldName =() => _data.FldName.ShouldBeEqualIgnoringCase("HUMMELDUMM");
}
EDIT 2
Tôi vẫn không chắc chắn nếu tôi nên kiểm tra chỉ một tài sản mỗi lớp. Theo ý kiến của tôi, điều này cho phép tôi cung cấp thêm thông tin cho đặc điểm kỹ thuật cụ thể là khi tôi phân tích cú pháp một dòng từ chỉ mục 59 thành chỉ mục 79, tôi lấy fldName. Nếu tôi kiểm tra tất cả các thuộc tính trong một lớp I mất thông tin này. Tôi có vượt qua các bài kiểm tra của mình không?
Các xét nghiệm của tôi bây giờ trông như thế này:
[Subject(typeof(ITMFileParser))]
public class When_parsing_single_line_from_ITM_file
{
const string Line = ""
static ITMFileParser _parser;
static ITMData _data;
Establish context =() => { _parser = new ITMFileParser(); };
private Because of =() => { _data = _parser.Parse(Line); };
It should_get_fld??? =() => _data.Fld???.ShouldEqual(???);
It should_get_fld??? =() => _data.Fld???.ShouldEqual(???);
It should_get_fld??? =() => _data.Fld???.ShouldEqual(???);
It should_get_fld??? =() => _data.Fld???.ShouldEqual(???);
It should_get_fld??? =() => _data.Fld???.ShouldEqual(???);
It should_get_fld??? =() => _data.Fld???.ShouldEqual(???);
It should_get_fld??? =() => _data.Fld???.ShouldEqual(???);
...
}
Ý anh là gì bởi "hiệu quả" chính xác? Bạn có muốn giảm thiểu thời gian phát triển của các bài kiểm tra đơn vị không? –
cũng có nghĩa là thử nghiệm với một chuỗi hoặc với nhiều chuỗi? thử nghiệm với một chuỗi chỉ chứa các giá trị tôi muốn khẳng định hoặc lấy toàn bộ chuỗi. – Rookian
Tôi vẫn chưa chắc chắn 100% chính xác câu hỏi là gì, nhưng tôi sẽ tạo ra một tập hợp các bài kiểm tra đơn vị khác nhau. Một phương pháp thử nghiệm có thể vượt qua trong một chuỗi đơn cụ thể và khẳng định rằng nó đã được phân tích cú pháp chính xác vào các thuộc tính có liên quan trên đối tượng IMTData kết quả. Có lẽ một thử nghiệm khác để kiểm tra 20 dòng, nó tạo ra một danh sách 20 mục. Tôi có thể có các phương pháp khác cho các trường hợp khó khăn cụ thể. Đây là khá nhiều những gì @Kenny đã mô tả, công cụ thử nghiệm đơn vị cơ bản. Lấy các yêu cầu cho phương thức Parse này, và đảo ngược kỹ thuật nó thành một vài trường hợp kiểm tra chứng minh tính chính xác. –