Tôi hiện đang cố gắng tìm hiểu kiểm tra đơn vị thích hợp. Vì vậy, bây giờ tôi đang cố gắng để viết đơn vị kiểm tra cho một lớp học nên bản đồ dữ liệu từ một XML-File cho các đối tượng thích hợp. Tất nhiên tất cả các chức năng của lớp phụ thuộc vào sự tồn tại của tệp XML tương ứng. Tệp XML được tải trong hàm tạo của lớp.Làm thế nào để đơn vị kiểm tra một lớp học mà cần một tập tin cụ thể để có mặt
Tôi đang sử dụng C# với NUnit. Cho đến nay tôi đã có hai bài kiểm tra:
[Test]
public void ShouldAllowInstanceToBeCreatedWhenXMLFileIsPresent()
{
if (File.Exists(SettingsReader.XML_SETTINGS_PATH))
{
SettingsReader settingsReader = new SettingsReader();
Assert.AreNotEqual(null, settingsReader);
}
}
[Test]
[ExpectedException("Telekanzlei.Clientmanager.XMLDataLayer.XMLFileNotFoundException")]
public void ShouldThrowExceptionWhenXMLFileIsNotPresent()
{
if (!File.Exists(SettingsReader.XML_SETTINGS_PATH))
{
SettingsReader settingsReader = new SettingsReader();
}
else
throw new XMLFileNotFoundException();
}
Tôi không chắc chắn nếu kiểm tra sự tồn tại của tập tin trong các thử nghiệm là một cách thích hợp để đi, vì vậy bất kỳ đề xuất về những thử nghiệm được hoan nghênh quá. Nhưng câu hỏi của tôi là, làm thế nào để tiến hành các thử nghiệm sau đây. Rõ ràng tất cả các bài kiểm tra sau đây sẽ thất bại, nếu không có tệp XML.
Vì vậy, tôi cho rằng tệp XML là hiện tại, trong khi lưu ý rằng một thử nghiệm không thành công có thể có nghĩa là nó không phải là? Điều đó dường như không đúng với tôi.
Có mẫu chung nào để xử lý sự cố như thế này không?
Thx cho bất kỳ sự giúp đỡ
chỉnh sửa: viết lại bài kiểm tra thứ hai, vì nó đã thất bại nếu tập tin đã thực sự hiện diện ...
edit2: Có thể nó đang giúp cho bạn biết, những gì thực sự SettingsReader làm. Cho đến nay nó trông như thế này:
public class SettingsReader
{
public static readonly string XML_SETTINGS_PATH = "C:\\Telekanzlei\\Clientmanager_2.0\\Settings.xml";
public XElement RootXElement { get; private set; }
public SettingsReader()
{
if (!File.Exists(XML_SETTINGS_PATH))
throw new XMLFileNotFoundException();
using (var fs = File.OpenRead(XML_SETTINGS_PATH))
{
RootXElement = XElement.Load(fs);
}
}
}
Tôi không chắc chắn, nhưng tôi đoán một StreamReader sẽ không phải là con đường để đi ở đây, đúng không?
Cài đặtĐược thiết kế để sử dụng tính năng tiêm phụ thuộc? Âm thanh như một trường hợp tốt cho DI và chế giễu. –
MSTest có [DeploymentItem] cho việc này. Có lẽ NUnit có một cái gì đó như thế? –