Làm thế nào để làm unit thử nghiệm trên private thành viên (và phương pháp) của các lớp học C++


0 Phiếu
Đã hỏi 04/4/2016 bởi kayloare (790 điểm)
Tôi rất mới để unit thử nghiệm và tôi là một chút nhầm lẫn. Tôi đang cố gắng để làm unit thử nghiệm (sử dụng khuôn khổ thử nghiệm thúc đẩy unit ) trên một class C++ được gọi là VariableImpl. Dưới đây là các chi tiết.
class Variable
{
public:
  void UpdateStatistics (void) {
    // compute mean based on m_val and update m_mean;
    OtherClass::SendData (m_mean);
    m_val.clear ();
  }
  virtual void RecordData (double) = 0;
protected:
  std::vector<double> m_val;
private:
  double m_mean;
};
class VariableImpl : public Variable
{
public:
  virtual void RecordData (double d) {
    // put data in m_val
  }
};
câu hỏi của tôi là làm thế nào tôi có thể kiểm tra nghĩa là tính toán chính xác? Lưu ý rằng 1) m_mean được bảo vệ và 2) UpdateStatistics gọi là một method một class và sau đó xóa các vector. Cách duy nhất tôi có thể nhìn thấy sẽ là thêm một getter (ví dụ, GetMean), nhưng tôi không thích giải pháp này ở tất cả, cũng như tôi nghĩ rằng nó là thanh lịch nhất. Làm thế nào tôi nên làm gì? Và tôi nên làm gì nếu tôi có thể test method private thay vì một biến private ? TIA, Jir

2 Câu trả lời

0 Phiếu
Đã trả lời 08/4/2016 bởi Gurtiano (950 điểm)
Đối với một phương pháp bảo vệ/biến, thừa hưởng một class thử nghiệm từ class và làm thử nghiệm của bạn. Cho một tư nhân, giới thiệu một lớp học của bạn. Nó không phải là tốt nhất các giải pháp, nhưng có thể làm việc cho bạn. Hoặc này
#define private public
hack
0 Phiếu
Đã trả lời 11/4/2016 bởi Surrais (580 điểm)
Vâng, unit thử nghiệm nên test đơn vị và lý tưởng class mỗi unit khép-điều này sau trực tiếp từ các nguyên tắc trách nhiệm duy nhất. Vì vậy, thử nghiệm các thành viên private của một class không phải là cần thiết- class là một hộp đen mà có thể được bảo hiểm trong một test unit như-là. Mặt khác, điều này không phải luôn luôn đúng, và đôi khi với lý do tốt (ví dụ, một số phương pháp của class có thể dựa vào một function Tiện ích private nên được kiểm tra). Một rất đơn giản, rất crufty nhưng cuối cùng thành công giải pháp là để đặt sau đây vào tệp trước khi của bạn thử nghiệm đơn vị bao gồm cả tiêu đề định nghĩa lớp học của bạn:
#define private public
tất nhiên, này phá hủy các encapsulation và ác. Nhưng để thử nghiệm, nó phục vụ mục đích.
Đã bình luận 12/4/2016 bởi Nelia_D (270 điểm)
Tôi đã có nghĩa là để yêu cầu một cái gì đó rất giống nhau. Nhưng trong ý kiến unit thử nghiệm và các lớp học lớn của tôi chỉ đơn giản là không trộn đều.
Đã bình luận 13/4/2016 bởi Bendas (85,050 điểm)
Vâng, bạn không thể nhìn thấy những tác động trong OtherClass?

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...