কিভাবে একটি জেএসপি ফাইল পরীক্ষা করতে?


12

আমি একটি জাভা 6 ইই অ্যাপ্লিকেশন বিকাশ করছি এবং আমি অন্যটির সাথে আমার জেএসপি কোডটি ফাংশন কল এবং কোডটির কোডটির মূল সংস্করণে পরীক্ষার সংস্করণ সহ যাচাই করছি তবে এটি আলগা এবং অবৈধ মনে হয়। এই ধরণের পরীক্ষাটি করার জন্য কি কোনও ভাল উপায় আছে?


2
পরীক্ষাগুলি থেকে আপনার কী জানা দরকার?

উত্তর:


15

আপনি যদি এমভিসি (মডেল ভিউ কন্ট্রোলার) সম্পর্কে না পড়ে থাকেন তবে তা করুন। আপনার কোনও জেএসপিতে কোড থাকা উচিত নয়, কেবল প্রদর্শন করুন। জেএসপিতে কোড লাগানো খুব 1900 এর।

গুরুতরভাবে যদিও, জেএসপিতে কোনও কোড না থাকলে আপনি জেএসপি পরীক্ষা করছেন না। আপনি ক্রিয়া / প্রবাহ পরীক্ষা করছেন। তারপরে আপনি HTTPUnit বা সেলেনিয়াম ব্যবহার করতে পারেন । বড় পার্থক্য হ'ল আসল ব্রাউজার থেকে সেলেনিয়াম পরীক্ষা করে।


13

আমি মনে করি না জেএসপিগুলিকে পরীক্ষা করার ভাল উপায় আছে, মূলত কারণ ইউনিট পরীক্ষার উন্নয়নের কেন্দ্রবিন্দু হওয়ার আগে সেগুলি তৈরি হয়েছিল developed

রবার্ট মার্টিন জেএসপি সংকলক হ্যাক করার বিষয়ে বেশ কয়েক বছর আগে একটি নিবন্ধ লিখেছিলেন যাতে আপনি পরিচালনা করতে পারেন, নন-ধারক ভিত্তিক ইউনিট পরীক্ষাগুলি। তাঁর ধারণাটি ভাল ছিল, তবে এটি পরের টমটিজির প্রধান প্রকাশের সাথে ভেঙে গেছে। এখানে খুব বেশি যাদু চলছে।

"শুধু কোড যুক্ত করবেন না এবং আপনার এটি পরীক্ষা করার প্রয়োজন হবে না" ধারণাটির সাথে আমি একমত নই। অবিশ্বাস্যভাবে আপনি জেএসপিতে কোড স্থাপন করা উচিত নয়। তবে তবুও একটি জটিল ইউআইতে প্রায়শই প্রদর্শন যুক্তি থাকে যা লাভজনকভাবে ইউনিট পরীক্ষিত হতে পারে tested

এই উদাহরণ বিবেচনা করুন:

<c:choose>
  <c:when test="${mydto.showAdminMenu}">
   The admin menu....
  </c:when>
  <c:otherwise>
    Something completely different
  </c:otherwise>
</c:choose>

এই কোডটি ইতিমধ্যে ভালভাবে সাজানো হয়েছে: আমরা অ্যাডমিন মেনু দেখছি কিনা তা সিদ্ধান্ত নেওয়ার যুক্তি। তবুও, যদি জেএসপিগুলির ইউনিট পরীক্ষার কোনও সহজ উপায় ছিল, তবে আমরা যে আচরণটি দেখতে চাই তা প্রকৃতরূপে প্রদর্শিত হয় তা দেখাতে একটি পরীক্ষা লিখতে পারি এবং এটি পৃষ্ঠাতে পরিবর্তন থেকে রক্ষা করতে পারে যা দুর্ঘটনাক্রমে অ্যাডমিন মেনুটিকে দৃশ্যমান করে তোলে যখন এটি করা উচিত না হবে না


4

একটি প্রোগ্রাম রয়েছে (আপনি যে কোনও অ্যাপ্লিকেশন সার্ভার ব্যবহার করছেন তা ব্যবহার করে) যা একটি .jsp ফাইলকে একটি জাভা ফাইলে সংকলন করে। উদাহরণস্বরূপ, সান / ওরাকল সংস্করণ jspc

আপনি যখন .jsp অনুবাদ দ্বারা উত্পাদিত হবে জাভা (আপনি এমনকি এটি বিল্ড প্রক্রিয়ার অংশ হিসাবে ব্যবহার করতে বিবেচনা করতে পারেন - প্রথম হিট উপর পারফরম্যান্স উন্নতির জন্য জেএসপি পূর্ববর্তী), আপনি তারপরে পরীক্ষা চালাতে পারেন অনুরোধটিকে ব্যঙ্গ করে এবং প্রতিক্রিয়া যাচাই করে আপনি যা প্রত্যাশা করছেন তা।

(উদাহরণ সহ সম্পাদনা করুন :)

এর মূল পদ্ধতি হ'ল _jspService(HttpServletRequest, HttpServletResponse)পদ্ধতি।

একটি তুচ্ছ হ্যালো ওয়ার্ল্ড জেএসপি:

<html>
    <head>
        <title>Hello world</title>
    </head>
    <body>
        <h1>Hello world</h1>
        Today is: <%= new java.util.Date().toString() %>
    </body>
</html>

(test.jsp 'ওয়েবঅ্যাপ' নামের একটি ডিরেক্টরিতে এবং একটি 'আউট' ডিরেক্টরিতে অবস্থিত) কমান্ডগুলি সংকলন jspc -v -d out -compile -uriroot webapp/ test.jspকরে একটি আউট ডিরেক্টরিতে একটি ফাইল বলে test_jsp.java। এই ফাইলটির মধ্যে রয়েছে (অন্যান্য কনফিগারেশন সেটআপের মোটামুটি বিট সহ):

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;

    try {
      response.setContentType("text/html");
      pageContext = _jspxFactory.getPageContext(this, request, response,
                null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("<html>\n\t<head>\n\t\t<title>Hello world</title>\n\t</head>\n\t<body>\n\t
\t<h1>Hello world</h1>\n\t\tToday is: ");
      out.print( new java.util.Date().toString() );
      out.write("\n\t</body>\n</html>\n\n");
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try { out.clearBuffer(); } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

এই মুহুর্তে, এটি নিশ্চিত করে নিন যে JspWriter কে লিখন বা মুদ্রণের সাথে ডাকা হয়েছে এবং কলটির বিষয়বস্তু আপনি যা আশা করছেন তা হ'ল।

যা কিছু বলেছিল, আদর্শ বিশ্বে, জাস্পের মধ্যে কোনও যুক্তি থাকা উচিত নয় - এই জাতীয় যুক্তি নিয়ন্ত্রণকারী বা ট্যাগলিবগুলিতে থাকবে যা অন্যান্য কৌশল দ্বারা পরীক্ষা করা হয়।


1
জেএসপিতে এমন কী থাকবে যা পরীক্ষা করা / উপহাস করা হবে? অনুরোধ / সেশনে ডেটা সেট করা এবং তারপরে প্রদর্শনটি পরীক্ষা করা? অথবা এটি যদি ভাল অনুশীলন অনুসরণ না করা হয় এবং জাসপটিতে প্রকৃত যুক্তি থাকে?
জিনে বোয়ারস্কি

@ জেনিবোয়ারস্কি উদাহরণস্বরূপ জেএসপি এবং কোড সহ আপডেট করেছেন Updated আমি এটি একটি traditionalতিহ্যবাহী জুনিটের সাথে পরীক্ষা করার চেষ্টা করা ভাল অনুশীলন হিসাবে বিবেচনা করব না - এটি পরীক্ষার আরও একটি ক্ষেত্র। বিদ্রূপের গভীরতাটি সরঞ্জাম সেটটির উপর নির্ভর করে বিশ্রী হতে পারে (উদাহরণস্বরূপ JspWriter সাবক্লাসিং করা যাতে এটি কী পাঠানো হয় তা সহজেই পরীক্ষা করতে পারে)।

3

আপনি এইচটিটিপি ইউনিট পরীক্ষার কাঠামোটি এইচটিটিপিউনাইট | এর মতো ব্যবহার করেও বিবেচনা করতে পারেন http://httpunit.sourceforge.net/

আরেকটি গুরুত্বপূর্ণ বিষয় হ'ল আপনার অ্যাপ্লিকেশন সম্পর্কে আলাদা আলাদা উদ্বেগ।

যেমন টিডিডি (http://en.wikedia.org/wiki/Test-driven_de વિકાસment) এর মতো কৌশল ব্যবহার করে , আপনি পরীক্ষার জন্য ধরণের নকশা তৈরি করবেন design

জেএসপি-র মধ্যে গ্রাস করা প্রকারগুলি নির্দিষ্ট ইউনিট পরীক্ষায় পরীক্ষা করা হবে। যদি এটি সম্ভব না হয় তবে আপনার ব্যবহারকারীর>> ব্রাউজার ইন্টারঅ্যাকশন (আবার, HTTPUnit ও অনুরূপ সরঞ্জাম) অনুকরণ করা উচিত ।


2
  • প্রকৃত ইউনিট পরীক্ষার সাথে সার্ভলেট প্রসঙ্গের বাইরে এটি পরীক্ষা করার জন্য সার্লেটের ক্রিয়ামূলক কোডটি বহিরাগত করার চেষ্টা করুন
  • সার্ভলেট এন্ডপয়েন্টগুলি যেমন সরঞ্জামগুলির সাহায্যে পরীক্ষা করুন:
    • HTTPUnit
    • HtmlUnit
    • সেলেনিউম্
    • ফণীমনসা
    • JspTest
    • ...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.