Tôi biết cách phát triển thử nghiệm tham số loại và kiểm tra tham số giá trị riêng biệt. Những gì tôi đang cố gắng tìm ra là nếu nó có thể kết hợp cả hai. Nói cách khác, hãy tạo một thử nghiệm chung có bất kỳ loại và phạm vi giá trị nào cho loại đó.Google Test: Có cách nào để kết hợp thử nghiệm vừa là tham số loại và tham số giá trị không?
Trả lời
Không có bất kỳ kết hợp sẵn sàng để mặc nào của các thử nghiệm loại tham số và các thử nghiệm tham số giá trị. Các nhà phát triển googletest đã asked the question and they said No.
Tuy nhiên, có một cách thường xuyên và đơn giản (theo đề nghị của Zhanyong Wan trong các cuộc thảo luận liên quan), trong đó bạn có thể thủ công bạn sở hữu type-parameterised trường hợp thử nghiệm mà kiểm tra một số điều kiện để một quy định phạm vi giá trị của loại tham số. Dưới đây là một ví dụ tiểu học nơi điều kiện chỉ là là lớn hơn 0:
#include <vector>
#include "gtest/gtest.h"
template<class T>
struct foo_test : public ::testing::Test {
static std::vector<T> _range_;
};
TYPED_TEST_CASE_P(foo_test);
TYPED_TEST_P(foo_test, IsGreaterThanZero) {
for (TypeParam value : foo_test<TypeParam>::_range_) {
EXPECT_GT(value,0);
}
}
REGISTER_TYPED_TEST_CASE_P(foo_test,IsGreaterThanZero);
typedef ::testing::Types<char, int, float> MyTypes;
INSTANTIATE_TYPED_TEST_CASE_P(My, foo_test, MyTypes);
template<> std::vector<char> foo_test<char>::_range_{'1','2','3'};
template<> std::vector<int> foo_test<int>::_range_{1,2,3};
template<> std::vector<float> foo_test<float>::_range_{1.1,2.2,0.0};
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Khi biên soạn và chạy sản lượng đó là:
[==========] Running 3 tests from 3 test cases.
[----------] Global test environment set-up.
[----------] 1 test from My/foo_test/0, where TypeParam = char
[ RUN ] My/foo_test/0.IsGreaterThanZero
[ OK ] My/foo_test/0.IsGreaterThanZero (0 ms)
[----------] 1 test from My/foo_test/0 (0 ms total)
[----------] 1 test from My/foo_test/1, where TypeParam = int
[ RUN ] My/foo_test/1.IsGreaterThanZero
[ OK ] My/foo_test/1.IsGreaterThanZero (0 ms)
[----------] 1 test from My/foo_test/1 (0 ms total)
[----------] 1 test from My/foo_test/2, where TypeParam = float
[ RUN ] My/foo_test/2.IsGreaterThanZero
/home/imk/develop/SO/gtest/main.cpp:14: Failure
Expected: (value) > (0), actual: 0 vs 0
[ FAILED ] My/foo_test/2.IsGreaterThanZero, where TypeParam = float (0 ms)
[----------] 1 test from My/foo_test/2 (1 ms total)
[----------] Global test environment tear-down
[==========] 3 tests from 3 test cases ran. (1 ms total)
[ PASSED ] 2 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] My/foo_test/2.IsGreaterThanZero, where TypeParam = float
1 FAILED TEST
Kết quả có granularity thô hơn sẽ lý tưởng: chỉ cần 3 thử nghiệm thay vì so với 9. Tuy nhiên, các giá trị thất bại có thể được báo cáo, như được hiển thị, vì vậy hạt thô có thể là có thể chấp nhận được.
Bất kỳ ý tưởng làm thế nào để có được một sản phẩm Descartes của các thông số loại/giá trị mà không cần mã hóa cứng nó? – memecs
Để khá rõ ràng, bạn muốn kiểm tra từng loại 'T0, .., Tn' cho mỗi một tập hợp các giá trị' V0, .., Vm' sao cho 'Ti' có thể được cấu thành từ' Vj' cho bất kỳ 'i <= n' và' j <= m'. Có đúng không? –
Phải, không chắc chắn ý bạn là gì với "Ti constructible from Vj". Tôi sẽ cung cấp cho bạn một ví dụ rõ ràng hơn: giả sử tôi có ba loại {T1, T2, T3} và hai tham số giá trị {V1, V2}, tôi muốn thử nghiệm với các bộ dữ liệu sau: {(T1, V1), (T1, V2), (T1, V3), (T2, V1), (T2, V2), v.v ...}. Điểm là, tôi có nhiều tham số và loại để kiểm tra và tôi không thể mã hóa tất cả chúng. – memecs
- 1. Truyền tên tệp và chuỗi đến thử nghiệm được tham số hóa bằng cách sử dụng thử nghiệm google
- 2. params Tham số với giá trị tham số mặc định
- 3. Làm cách nào để chỉ định các tham số phương pháp thử nghiệm với TestDriven.NET?
- 4. PDO: "Số tham số không hợp lệ" khi thay thế nhiều tham số có cùng giá trị
- 5. Tham số thử nghiệm trong xUnit.net tương tự như NUnit
- 6. Xác minh giá trị tham số tham chiếu với Moq
- 7. Có cách nào để đặt tham số mặc định bằng một giá trị tham số khác không?
- 8. Mùa xuân tham số/lý thuyết JUnit thử nghiệm
- 9. Tham số tùy chọn Giá trị Bảng
- 10. Tôi có thể cung cấp tên tốt hơn cho các thử nghiệm tham số có giá trị trong gtest không?
- 11. Scala thử nghiệm mocking tham số ngầm định?
- 12. Gọi là không có tham số rỗng
- 13. đèo lambda để tham số NUnit thử nghiệm
- 14. Loại có thể là loại tham chiếu và loại giá trị cùng một lúc không?
- 15. Kết hợp hành động và Func trong một tham số
- 16. Có cách nào để suy ra giá trị của tham số mẫu con trỏ hàm không?
- 17. Cách đọc các giá trị tham số từ một TestCase trong Microsoft Test Manager
- 18. Bất kỳ tham chiếu nào đến lỗi nguyên nhân profilecommon Giá trị không được rỗng. Tên tham số: loại
- 19. Có thể tham số giá trị của Googletest với nhiều loại thông số khác nhau phù hợp với tính linh hoạt của mbUnit không?
- 20. Giá trị tham số IProcessHostPreloadClient ở đâu?
- 21. PDO - Số tham số không hợp lệ
- 22. Truy tìm cuộc gọi và tham số chức năng C - trường hợp thử nghiệm và tạo mô hình
- 23. web.py: cách nhận tham số POST và tham số GET?
- 24. Moq và truy cập được gọi là tham số
- 25. Doctrine setParameter và số tham số không hợp lệ
- 26. Loại Tham gia nào để xem các giá trị không tồn tại trong bảng Tham gia?
- 27. Giá trị và các loại tham chiếu
- 28. Có cách nào để bỏ qua tham số không?
- 29. Tìm Loại tham số Loại
- 30. Không có giá trị nào được cung cấp cho tham số 'appIdName' khi cấp phép
Tôi đã tự hỏi tương tự ... – memecs