Làm thế nào để đơn vị kiểm tra T-SQL của bạn? Bạn sử dụng thư viện/công cụ nào?
Hãy xem TSQLUnit và điều này tSQLt.
Tôi đã thử nghiệm bằng cách sử dụng một vài khung công tác khác nhau trong nhiều ngôn ngữ để kiểm tra T-SQL, chẳng hạn như junit hoặc nunit. Lý do tôi đi tuyến đường này là tận dụng môi trường thử nghiệm phong phú bằng các ngôn ngữ khác này. Nếu ví dụ bạn sử dụng nunit nó có một dòng lệnh tốt đẹp và gui viewer để xem xét trạng thái của các test của bạn và bởi vì bạn sử dụng .net để viết test của bạn nó móc vào máy chủ sql rất dễ dàng. JUnit có một số tích hợp tốt đẹp với rất nhiều môi trường IDE nguồn mở và thương mại như NetBeans và IDEA cũng như làm cho việc kiểm tra T-SQL giống như kiểm thử mã Java, rất giàu. Các tiêu cực là bạn không chỉ viết T-SQL bạn cũng đang viết java hoặc .net để kiểm tra T-SQL của bạn.
Tôi cũng đã sử dụng Ruby với Rake (nó giống như make hoặc ant) và thực hiện các cuộc gọi hệ thống tới sqlcmd để thực thi các tập lệnh sql có chứa các kiểm tra. Các kịch bản trả về các giá trị và chuỗi trở lại ruby để vượt qua hoặc thất bại một thử nghiệm. Tôi thích cách tiếp cận này là tốt nhất vì nó rất gọn gàng và dễ dàng cho người khác để tiếp tục. Các tuyến khác được đề cập ở trên yêu cầu các nhà phát triển sử dụng .net hoặc java nếu bạn có tất cả các loại DBA có thể khó khắc phục nơi Ruby có cách tiếp cận kịch bản sql dễ bán hơn từ kinh nghiệm của tôi. Các kiểu DBA có xu hướng mở và có khả năng nhận các kịch bản như các ngôn ngữ dễ dàng và Ruby có một đường cong học tập thấp và các kịch bản rất dễ chạy liên quan đến một lớp .net hoặc java.
Phần trăm mã của bạn được bao gồm trong các bài kiểm tra đơn vị và cách bạn đo lường?
Có lẽ chỉ có 20% chỉ vì hầu hết các hệ thống cơ sở dữ liệu trước đây không có thử nghiệm được tạo cho chúng khi chúng được tạo nên tôi đang tích cực thử nghiệm thêm và thêm thử nghiệm khi lỗi mới và cải tiến xuất hiện.
Bạn có nghĩ rằng thời gian và công sức mà bạn đầu tư vào việc khai thác thử nghiệm đơn vị của bạn đã được đền đáp hay không?
Cơ sở dữ liệu là bánh mì và bơ của hầu hết các doanh nghiệp. Nó luôn luôn trả hết trong quan điểm của tôi. Nếu doanh nghiệp của bạn chấp nhận tỷ lệ thất bại và tỷ lệ thất bại cao đối với khách hàng thì không có thử nghiệm nào có thể không đáng giá vì nó không miễn phí.
Nếu bạn không sử dụng thử nghiệm đơn vị, bạn có thể giải thích tại sao không?
Tôi rất thích xem có ai đưa ra câu trả lời cho điều này không vô lý hay không. Kinda như thế nào tại sao bạn không đặt con của bạn trong một chỗ ngồi xe khi lái xe xuống đường ... "Họ chi phí quá nhiều" ... "Mất quá nhiều thời gian để đưa đứa trẻ vào nó" .. "Anh ấy an toàn mà không có nó ".." Những gì có thể đi sai để biện minh cho nó ".." Chỉ có không đủ thời gian "Tất cả những điều này là bs.
Vâng tôi biết một chút cực đoan có thể, nhưng thực sự nếu bạn có một hệ thống và nó mang lại giá trị công ty cần được thống nhất thử nghiệm để nắm bắt một số vấn đề trước khi chúng trở thành vấn đề sản xuất. Thử nghiệm đơn vị không phải là thuốc chữa bách bệnh, nhưng đó là một công cụ chúng tôi phải làm tốt nhất có thể.
Tôi sẽ nói tổng thể bằng cách nào đó hầu hết mọi người cung cấp cho cơ sở dữ liệu một pass miễn phí khi nói đến thử nghiệm có cấu trúc. Tôi không biết tại sao lại như vậy, nhưng tôi đã thấy nó ở công ty sau công ty. Tôi rất thích nhìn thấy sự thay đổi đó.
StarShip3000, Bạn đang sử dụng TSQLUnit? Bạn có so sánh toàn bộ tập hợp kết quả với các giá trị dự kiến không, hoặc bạn có khớp các giá trị riêng lẻ một cách riêng biệt không? –
Hiện tại tôi không sử dụng TSQLUnit tôi đã từng làm trong quá khứ. Bây giờ tôi sử dụng một khung kiểm thử đơn vị từ Ruby và Ruby thực thi kịch bản lệnh sql của tôi, trong đó có 1 kiểm tra thông qua một cuộc gọi đến sqlcmd. Cuộc gọi này sau đó trả về giá trị lỗi vượt qua và mô tả chuỗi thành ruby. Tôi sẽ đào lên ví dụ đơn giản khi tôi có thời gian. – Kuberchaun