উত্তর:
আপনি যদি এমভিসি (মডেল ভিউ কন্ট্রোলার) সম্পর্কে না পড়ে থাকেন তবে তা করুন। আপনার কোনও জেএসপিতে কোড থাকা উচিত নয়, কেবল প্রদর্শন করুন। জেএসপিতে কোড লাগানো খুব 1900 এর।
গুরুতরভাবে যদিও, জেএসপিতে কোনও কোড না থাকলে আপনি জেএসপি পরীক্ষা করছেন না। আপনি ক্রিয়া / প্রবাহ পরীক্ষা করছেন। তারপরে আপনি HTTPUnit বা সেলেনিয়াম ব্যবহার করতে পারেন । বড় পার্থক্য হ'ল আসল ব্রাউজার থেকে সেলেনিয়াম পরীক্ষা করে।
আমি মনে করি না জেএসপিগুলিকে পরীক্ষা করার ভাল উপায় আছে, মূলত কারণ ইউনিট পরীক্ষার উন্নয়নের কেন্দ্রবিন্দু হওয়ার আগে সেগুলি তৈরি হয়েছিল developed
রবার্ট মার্টিন জেএসপি সংকলক হ্যাক করার বিষয়ে বেশ কয়েক বছর আগে একটি নিবন্ধ লিখেছিলেন যাতে আপনি পরিচালনা করতে পারেন, নন-ধারক ভিত্তিক ইউনিট পরীক্ষাগুলি। তাঁর ধারণাটি ভাল ছিল, তবে এটি পরের টমটিজির প্রধান প্রকাশের সাথে ভেঙে গেছে। এখানে খুব বেশি যাদু চলছে।
"শুধু কোড যুক্ত করবেন না এবং আপনার এটি পরীক্ষা করার প্রয়োজন হবে না" ধারণাটির সাথে আমি একমত নই। অবিশ্বাস্যভাবে আপনি জেএসপিতে কোড স্থাপন করা উচিত নয়। তবে তবুও একটি জটিল ইউআইতে প্রায়শই প্রদর্শন যুক্তি থাকে যা লাভজনকভাবে ইউনিট পরীক্ষিত হতে পারে tested
এই উদাহরণ বিবেচনা করুন:
<c:choose>
<c:when test="${mydto.showAdminMenu}">
The admin menu....
</c:when>
<c:otherwise>
Something completely different
</c:otherwise>
</c:choose>
এই কোডটি ইতিমধ্যে ভালভাবে সাজানো হয়েছে: আমরা অ্যাডমিন মেনু দেখছি কিনা তা সিদ্ধান্ত নেওয়ার যুক্তি। তবুও, যদি জেএসপিগুলির ইউনিট পরীক্ষার কোনও সহজ উপায় ছিল, তবে আমরা যে আচরণটি দেখতে চাই তা প্রকৃতরূপে প্রদর্শিত হয় তা দেখাতে একটি পরীক্ষা লিখতে পারি এবং এটি পৃষ্ঠাতে পরিবর্তন থেকে রক্ষা করতে পারে যা দুর্ঘটনাক্রমে অ্যাডমিন মেনুটিকে দৃশ্যমান করে তোলে যখন এটি করা উচিত না হবে না
একটি প্রোগ্রাম রয়েছে (আপনি যে কোনও অ্যাপ্লিকেশন সার্ভার ব্যবহার করছেন তা ব্যবহার করে) যা একটি .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 কে লিখন বা মুদ্রণের সাথে ডাকা হয়েছে এবং কলটির বিষয়বস্তু আপনি যা আশা করছেন তা হ'ল।
যা কিছু বলেছিল, আদর্শ বিশ্বে, জাস্পের মধ্যে কোনও যুক্তি থাকা উচিত নয় - এই জাতীয় যুক্তি নিয়ন্ত্রণকারী বা ট্যাগলিবগুলিতে থাকবে যা অন্যান্য কৌশল দ্বারা পরীক্ষা করা হয়।
আপনি এইচটিটিপি ইউনিট পরীক্ষার কাঠামোটি এইচটিটিপিউনাইট | এর মতো ব্যবহার করেও বিবেচনা করতে পারেন http://httpunit.sourceforge.net/ ।
আরেকটি গুরুত্বপূর্ণ বিষয় হ'ল আপনার অ্যাপ্লিকেশন সম্পর্কে আলাদা আলাদা উদ্বেগ।
যেমন টিডিডি (http://en.wikedia.org/wiki/Test-driven_de વિકાસment) এর মতো কৌশল ব্যবহার করে , আপনি পরীক্ষার জন্য ধরণের নকশা তৈরি করবেন design
জেএসপি-র মধ্যে গ্রাস করা প্রকারগুলি নির্দিষ্ট ইউনিট পরীক্ষায় পরীক্ষা করা হবে। যদি এটি সম্ভব না হয় তবে আপনার ব্যবহারকারীর>> ব্রাউজার ইন্টারঅ্যাকশন (আবার, HTTPUnit ও অনুরূপ সরঞ্জাম) অনুকরণ করা উচিত ।