Nói rằng tôi đã hai lớp gọi Book
và Library
như sau:Làm thế nào để có một thử nghiệm nguyên tử thực sự trong QUnit?
var Book = function(title, author)
{
this.title = title;
this.author = author;
};
và
var Library = function()
{
var dbName = 'test';
this.getLibrary = function() {
return JSON.parse(window.localStorage.getItem(dbName));
};
this.save = function(library) {
window.localStorage.setItem(dbName, JSON.stringify(library));
};
}
Library.prototype.addBook = function(book) {
var library = this.getLibrary();
library.push(book);
this.save(library);
return library;
};
Library.prototype.removeBook = function(book) {
var library = this.getLibrary();
// Find and delete the right book
this.save(library);
return library;
};
Câu hỏi của tôi là: Làm thế nào tôi có thể kiểm tra đơn vị lớp Library
sử dụng QUnit để có một nguyên tử thực tế và kiểm tra độc lập?
Tôi đã viết chức năng kiểm tra này nhưng nó không thỏa mãn tôi. Nó không có vẻ rất nguyên tử và độc lập vì nó kết hợp nhiều chức năng mà tôi nghĩ nên được kiểm tra độc lập. Tôi muốn biết nếu có một cách tốt hơn hoặc tôi đang thử nghiệm nó tốt rồi.
test("test", function() {
var library = new Library();
deepEqual(library.getLibrary(), []);
// Add book1
var book1 = new Book("A book", "An author");
deepEqual(library.addBook(book1), [book1]);
deepEqual(library.getLibrary(), [book1]);
// Add book2
book2 = new Result("A new book", "Another author");
deepEqual(library.addBook(book2), [book2, book1]);
deepEqual(library.getLibrary(), [book2, book1]]);
// Remove book1
deepEqual(library.removeResult(book1), [book2]);
deepEqual(library.getLibrary(), [book2]);
// Remove book2
deepEqual(library.removeResult(book2), []);
deepEqual(library.getLibrary(), []);
});
Điểm tốt. Nhưng vấn đề chính mà tôi có là để kiểm tra removeBook, ví dụ, tôi phải dựa vào addBook. Làm thế nào tôi có thể đối phó với điều này? – user1730232
@ user1730232 Đó không phải là một vấn đề thực sự. Thêm/xóa chức năng không trực giao. Chỉ cần kiểm tra tất cả các trường hợp: Xóa mà không thêm lỗi. Loại bỏ với thêm lá 0 yếu tố. Vv – Bringer128
@ user1730232 Các hoạt động của một lớp đơn lẻ không thể hoàn toàn độc lập. Thực tế, nó sẽ là một mùi mã nếu chúng là - một dấu hiệu cho thấy lớp học có quá nhiều trách nhiệm. Nếu bạn muốn được * rất * chính thức về điều này, tôi cho rằng bạn có thể làm một số loại đồ thị của các bài kiểm tra của bạn để phân tích sự phụ thuộc giữa các hành vi, và làm cho nó không chỉ bao gồm các chu kỳ. Nhưng nói chung, bạn có thể giả định rằng việc triển khai lớp là "lành mạnh" và không được mã hóa cụ thể để vượt qua bộ kiểm thử khi đang vô dụng và viết các bài kiểm tra để phát hiện các phép hồi quy, vv thay thế. – millimoose