<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Abhatt</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Abhatt"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Abhatt"/>
	<updated>2026-05-31T08:19:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=28161</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 13 zz</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=28161"/>
		<updated>2009-11-18T05:36:30Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bob Martin's Stable Dependencies Principle says, &amp;quot;The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Bob Martin=&lt;br /&gt;
&lt;br /&gt;
[http://today.java.net/pub/au/90 Robert C. Martin] (Uncle Bob) defines the domain of [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf design patterns] to be the architecture of systems modules (packages, classes and components) and their interconnections.  His design patterns address the four major reasons for failure of the systems:  rigidity, fragility, immobility and viscosity [http://www.objectmentor.com/resources/articles/oodmetrc.pdf]. &lt;br /&gt;
&lt;br /&gt;
Following are the list of few design principles quoted by him to avoid the pitfalls associated with unsuccessful software engineering,&lt;br /&gt;
[http://labs.cs.utt.ro/labs/ip2/html/lectures/5/lecture5.ppt Reuse/Release Equivalence Principle],&lt;br /&gt;
[http://iface.wordpress.com/2006/04/08/common-closure-principle/ Common Closure Principle],&lt;br /&gt;
[http://www.objectmentor.com/omSolutions/oops_what.html Common Reuse Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/10/acyclic-dependencies-principle/ Acyclic Dependencies Principle],&lt;br /&gt;
[http://www.objectmentor.com/resources/articles/stability.pdf Staple Dependencies Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/20/stable-abstractions-principle/ Stable Abstraction Principle].&lt;br /&gt;
&lt;br /&gt;
The objective of this article is to discuss in detail Stable Dependencies Principle. Each of the four problems discussed above can be caused by improper dependencies between the modules of the software. It is the dependency architecture that degrades the ability of the software to be maintained. The Stable Dependencies Principle is one of the principle which discusses its concern with coupling of packages, or the degree to which they rely on each other.&lt;br /&gt;
&lt;br /&gt;
=Stable Dependencies Principle=&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Principle:&lt;br /&gt;
''The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, if we want stuff to be changed, we want it to be easy, so we need to ensure our design is such that we keep all the changing stuff in one place and independent. This can be done by measuring the afferent (from outside in) and efferent (from inside out) dependencies of classes in the package.&lt;br /&gt;
&lt;br /&gt;
Packages can be classified as stable(difficult to change) and volatile(easy to change). Stable packages must not depend on Volatile one because&lt;br /&gt;
&lt;br /&gt;
- It makes Volatile packages harder to change&lt;br /&gt;
&lt;br /&gt;
- Or It may force stable packages to be changed often, in other words volatile becomes stable&lt;br /&gt;
&lt;br /&gt;
Thus we have to ensure that volatile packages must depend on stable packages.&lt;br /&gt;
&lt;br /&gt;
//does this example make sense ???&lt;br /&gt;
&lt;br /&gt;
Lets consider an example where a Class library L depends on the collection class library C which further depends on special memory allocation library M. For execution speed, API of C is modeled after API of M. Now M has a serious bug which needs to be fixed. Thus Class C needs to be updated. How does this affect all the classes here?&lt;br /&gt;
&lt;br /&gt;
- Fixing issues in Class M causes API changes in C which requires changes in the header files of Class C&lt;br /&gt;
&lt;br /&gt;
- As API of M reflects in API of C, L also has to be modified too.&lt;br /&gt;
&lt;br /&gt;
==Stability==&lt;br /&gt;
What does stability mean? By simply goggling stability, we get definitions like resistance to change, reliability etc [http://www.answers.com/topic/stability]. Thus it roughly means &amp;quot;hard to change&amp;quot;, whereas instability means &amp;quot;easy to change&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Consider an example, in which you stand a penny on its side. Is this penny stable in that position? Mostly people would answer a no, even though it does not change its position for a very long time. Thus, stability has nothing directly to do with the frequency of change. It more relates to the amount of work required to make a change. The penny is not stable because it takes little work to topple it.&lt;br /&gt;
&lt;br /&gt;
Thus stability of a software package would depend on various factors like size, complexity, clarity, etc.  But with respect to our principle, stability focus on a different factor. A software package would be difficult to change, if it has lots of other software packages depend on upon it. Thus a package with lots of incoming dependencies is very stable because it requires a great deal of work for any change to propagate with all the dependent packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Stability Metrics==&lt;br /&gt;
Stability metrics determine the stability of a package which is calculated by counting the number of dependencies that enter and leave the package.&lt;br /&gt;
&lt;br /&gt;
The Instability metric I is given as &lt;br /&gt;
&lt;br /&gt;
'''I = Ca/(Ca +Ce)'''&lt;br /&gt;
&lt;br /&gt;
where,&lt;br /&gt;
&lt;br /&gt;
Ca --&amp;gt; The number of incoming dependencies or Afferent Couplings&lt;br /&gt;
   &lt;br /&gt;
Ce --&amp;gt; The number of outgoing dependencies or Efferent Couplings&lt;br /&gt;
&lt;br /&gt;
The value of I is always between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
- '''I = 0''' is a Stable Package. In this case, other packages have a dependency on this package but it does not depend on any other packages, hence ''responsible and independent''.&lt;br /&gt;
&lt;br /&gt;
- '''I = 1''' is an Instable Package. Here, no other packages have a dependency on this package but this package depends on the other packages, hence ''irresponsible and dependent''.&lt;br /&gt;
&lt;br /&gt;
The values Ca and Ce are calculated by counting the number of classes outside the package that have dependencies with the classes inside the package being considered. A figure explaining how the metric can be calculated is shown below&lt;br /&gt;
&lt;br /&gt;
[[Image:metrics.jpg|centre]]&lt;br /&gt;
&lt;br /&gt;
In the above example we can compute the Instability metric of the package in the center. Here the dashed arrows represent package dependencies.&lt;br /&gt;
&lt;br /&gt;
Here Ca, which is the number of classes outside the package at center that depend upon the classes within this package is equal to 4. Whereas Ce, which is the number of classes inside the package at center that depend upon classes outside this package is 3.&lt;br /&gt;
Hence I = 3/7.&lt;br /&gt;
&lt;br /&gt;
Thus according to the Stable Dependencies Principle I metric of the package should be greater than the I metric of the packagesit depends upon thereby showing that I metrics decrease in the direction of dependency.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Stability and Dependencies==&lt;br /&gt;
With the above definition of stability, you don't want to increase stability of the packages as your software can not change easily then. But if the system has been designed well then hard to change packages or stable packages will not change that frequently. Thus, we need to understand the relationship between stability and dependencies. &lt;br /&gt;
&lt;br /&gt;
Consider a following example, Here package x, depends on three other packages. Thus, it is said that x is responsible to the other three packages. On other hand, x does not depend on anything, thus it does not influence any other change. It is said to be independent [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf].&lt;br /&gt;
&lt;br /&gt;
[[Image:2-25.jpg|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another example, here package y has no packages depending upon it, thus we call it irresponsible. It is very instable package. But there are three other packages that y depends upon, so changes from these three external packages may affect it and thus we say y is dependent.&lt;br /&gt;
&lt;br /&gt;
[[Image:2-26.jpg|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thus we need to be careful while designing packages especially lower level packages (which would have more users) and higher level packages (which would tend to have fewer users).&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Metrics.jpg&amp;diff=28091</id>
		<title>File:Metrics.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Metrics.jpg&amp;diff=28091"/>
		<updated>2009-11-18T05:01:00Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=28047</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 13 zz</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=28047"/>
		<updated>2009-11-18T04:32:31Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bob Martin's Stable Dependencies Principle says, &amp;quot;The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Bob Martin=&lt;br /&gt;
&lt;br /&gt;
[http://today.java.net/pub/au/90 Robert C. Martin] (Uncle Bob) defines the domain of [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf design patterns] to be the architecture of systems modules (packages, classes and components) and their interconnections.  His design patterns address the four major reasons for failure of the systems:  rigidity, fragility, immobility and viscosity [http://www.objectmentor.com/resources/articles/oodmetrc.pdf]. &lt;br /&gt;
&lt;br /&gt;
Following are the list of few design principles quoted by him to avoid the pitfalls associated with unsuccessful software engineering,&lt;br /&gt;
[http://labs.cs.utt.ro/labs/ip2/html/lectures/5/lecture5.ppt Reuse/Release Equivalence Principle],&lt;br /&gt;
[http://iface.wordpress.com/2006/04/08/common-closure-principle/ Common Closure Principle],&lt;br /&gt;
[http://www.objectmentor.com/omSolutions/oops_what.html Common Reuse Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/10/acyclic-dependencies-principle/ Acyclic Dependencies Principle],&lt;br /&gt;
[http://www.objectmentor.com/resources/articles/stability.pdf Staple Dependencies Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/20/stable-abstractions-principle/ Stable Abstraction Principle].&lt;br /&gt;
&lt;br /&gt;
The objective of this article is to discuss in detail Stable Dependencies Principle. Each of the four problems discussed above can be caused by improper dependencies between the modules of the software. It is the dependency architecture that degrades the ability of the software to be maintained. The Stable Dependencies Principle is one of the principle which discusses its concern with coupling of packages, or the degree to which they rely on each other.&lt;br /&gt;
&lt;br /&gt;
=Stable Dependencies Principle=&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Principle:&lt;br /&gt;
''The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, if we want stuff to be changed, we want it to be easy, so we need to ensure our design is such that we keep all the changing stuff in one place and independent. This can be done by measuring the afferent (from outside in) and efferent (from inside out) dependencies of classes in the package.&lt;br /&gt;
&lt;br /&gt;
Packages can be classified as stable(difficult to change) and volatile(easy to change). Stable packages must not depend on Volatile one because&lt;br /&gt;
&lt;br /&gt;
- It makes Volatile packages harder to change&lt;br /&gt;
&lt;br /&gt;
- Or It may force stable packages to be changed often, in other words volatile becomes stable&lt;br /&gt;
&lt;br /&gt;
Thus we have to ensure that volatile packages must depend on stable packages.&lt;br /&gt;
&lt;br /&gt;
//does this example make sense ???&lt;br /&gt;
&lt;br /&gt;
Lets consider an example where a Class library L depends on the collection class library C which further depends on special memory allocation library M. For execution speed, API of C is modeled after API of M. Now M has a serious bug which needs to be fixed. Thus Class C needs to be updated. How does this affect all the classes here?&lt;br /&gt;
&lt;br /&gt;
- Fixing issues in Class M causes API changes in C which requires changes in the header files of Class C&lt;br /&gt;
&lt;br /&gt;
- As API of M reflects in API of C, L also has to be modified too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Stability==&lt;br /&gt;
What does stability mean? By simply goggling stability, we get definitions like resistance to change, reliability etc [http://www.answers.com/topic/stability]. Thus it roughly means &amp;quot;hard to change&amp;quot;, whereas instability means &amp;quot;easy to change&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Consider an example, in which you stand a penny on its side. Is this penny stable in that position? Mostly people would answer a no, even though it does not change its position for a very long time. Thus, stability has nothing directly to do with the frequency of change. It more relates to the amount of work required to make a change. The penny is not stable because it takes little work to topple it.&lt;br /&gt;
&lt;br /&gt;
Thus stability of a software package would depend on various factors like size, complexity, clarity, etc.  But with respect to our principle, stability focus on a different factor. A software package would be difficult to change, if it has lots of other software packages depend on upon it. Thus a package with lots of incoming dependencies is very stable because it requires a great deal of work for any change to propagate with all the dependent packages.&lt;br /&gt;
&lt;br /&gt;
==Stability and Dependencies==&lt;br /&gt;
With the above definition of stability, you don't want to increase stability of the packages as your software can not change easily then. But if the system has been designed well then hard to change packages or stable packages will not change that frequently. Thus, we need to understand the relationship between stability and dependencies. &lt;br /&gt;
&lt;br /&gt;
Consider a following example, Here package x, depends on three other packages. Thus, it is said that x is responsible to the other three packages. On other hand, x does not depend on anything, thus it does not influence any other change. It is said to be independent [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf].&lt;br /&gt;
&lt;br /&gt;
[[Image:2-25.jpg|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another example, here package y has no packages depending upon it, thus we call it irresponsible. It is very instable package. But there are three other packages that y depends upon, so changes from these three external packages may affect it and thus we say y is dependent.&lt;br /&gt;
&lt;br /&gt;
[[Image:2-26.jpg|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thus we need to be careful while designing packages especially lower level packages (which would have more users) and higher level packages (which would tend to have fewer users).&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:2-26.jpg&amp;diff=28035</id>
		<title>File:2-26.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:2-26.jpg&amp;diff=28035"/>
		<updated>2009-11-18T04:27:06Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=28027</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 13 zz</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=28027"/>
		<updated>2009-11-18T04:20:10Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bob Martin's Stable Dependencies Principle says, &amp;quot;The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Bob Martin=&lt;br /&gt;
&lt;br /&gt;
[http://today.java.net/pub/au/90 Robert C. Martin] (Uncle Bob) defines the domain of [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf design patterns] to be the architecture of systems modules (packages, classes and components) and their interconnections.  His design patterns address the four major reasons for failure of the systems:  rigidity, fragility, immobility and viscosity [http://www.objectmentor.com/resources/articles/oodmetrc.pdf]. &lt;br /&gt;
&lt;br /&gt;
Following are the list of few design principles quoted by him to avoid the pitfalls associated with unsuccessful software engineering,&lt;br /&gt;
[http://labs.cs.utt.ro/labs/ip2/html/lectures/5/lecture5.ppt Reuse/Release Equivalence Principle],&lt;br /&gt;
[http://iface.wordpress.com/2006/04/08/common-closure-principle/ Common Closure Principle],&lt;br /&gt;
[http://www.objectmentor.com/omSolutions/oops_what.html Common Reuse Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/10/acyclic-dependencies-principle/ Acyclic Dependencies Principle],&lt;br /&gt;
[http://www.objectmentor.com/resources/articles/stability.pdf Staple Dependencies Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/20/stable-abstractions-principle/ Stable Abstraction Principle].&lt;br /&gt;
&lt;br /&gt;
The objective of this article is to discuss in detail Stable Dependencies Principle. Each of the four problems discussed above can be caused by improper dependencies between the modules of the software. It is the dependency architecture that degrades the ability of the software to be maintained. The Stable Dependencies Principle is one of the principle which discusses its concern with coupling of packages, or the degree to which they rely on each other.&lt;br /&gt;
&lt;br /&gt;
=Stable Dependencies Principle=&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Principle:&lt;br /&gt;
''The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, if we want stuff to be changed, we want it to be easy, so we need to ensure our design is such that we keep all the changing stuff in one place and independent. This can be done by measuring the afferent (from outside in) and efferent (from inside out) dependencies of classes in the package.&lt;br /&gt;
&lt;br /&gt;
Packages can be classified as stable(difficult to change) and volatile(easy to change). Stable packages must not depend on Volatile one because&lt;br /&gt;
&lt;br /&gt;
- It makes Volatile packages harder to change&lt;br /&gt;
&lt;br /&gt;
- Or It may force stable packages to be changed often, in other words volatile becomes stable&lt;br /&gt;
&lt;br /&gt;
Thus we have to ensure that volatile packages must depend on stable packages.&lt;br /&gt;
&lt;br /&gt;
//does this example make sense ???&lt;br /&gt;
&lt;br /&gt;
Lets consider an example where a Class library L depends on the collection class library C which further depends on special memory allocation library M. For execution speed, API of C is modeled after API of M. Now M has a serious bug which needs to be fixed. Thus Class C needs to be updated. How does this affect all the classes here?&lt;br /&gt;
&lt;br /&gt;
- Fixing issues in Class M causes API changes in C which requires changes in the header files of Class C&lt;br /&gt;
&lt;br /&gt;
- As API of M reflects in API of C, L also has to be modified too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Stability==&lt;br /&gt;
What does stability mean? By simply goggling stability, we get definitions like resistance to change, reliability etc [http://www.answers.com/topic/stability]. Thus it roughly means &amp;quot;hard to change&amp;quot;, whereas instability means &amp;quot;easy to change&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Consider an example, in which you stand a penny on its side. Is this penny stable in that position? Mostly people would answer a no, even though it does not change its position for a very long time. Thus, stability has nothing directly to do with the frequency of change. It more relates to the amount of work required to make a change. The penny is not stable because it takes little work to topple it.&lt;br /&gt;
&lt;br /&gt;
Thus stability of a software package would depend on various factors like size, complexity, clarity, etc.  But with respect to our principle, stability focus on a different factor. A software package would be difficult to change, if it has lots of other software packages depend on upon it. Thus a package with lots of incoming dependencies is very stable because it requires a great deal of work for any change to propagate with all the dependent packages.&lt;br /&gt;
&lt;br /&gt;
==Stability and Dependencies==&lt;br /&gt;
With the above definition of stability, you don't want to increase stability of the packages as your software can not change easily then. But if the system has been designed well then hard to change packages or stable packages will not change that frequently. Thus, we need to understand the relationship between stability and dependencies. &lt;br /&gt;
&lt;br /&gt;
Consider a following example, Here package x, depends on three other packages. Thus, it is said that x is responsible to the other three packages. On other hand, x does not depend on anything, thus it does not influence any other change. It is said to be independent [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf].&lt;br /&gt;
&lt;br /&gt;
[[Image:2-25.jpg]]&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-25 on page 23)&lt;br /&gt;
&lt;br /&gt;
Another example, here package y has no packages depending upon it, thus we call it irresponsible. It is very instable package. But there are three other packages that y depends upon, so changes from these three external packages may affect it and thus we say y is dependent.&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-26 on page 23)&lt;br /&gt;
&lt;br /&gt;
Thus we need to be careful while designing packages especially lower level packages (which would have more users) and higher level packages (which would tend to have fewer users).&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:2-25.jpg&amp;diff=28020</id>
		<title>File:2-25.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:2-25.jpg&amp;diff=28020"/>
		<updated>2009-11-18T04:15:03Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: Stablity and dependencies&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stablity and dependencies&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=27877</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 13 zz</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=27877"/>
		<updated>2009-11-18T02:33:43Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bob Martin's Stable Dependencies Principle says, &amp;quot;The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Bob Martin=&lt;br /&gt;
&lt;br /&gt;
[http://today.java.net/pub/au/90 Robert C. Martin] (Uncle Bob) defines the domain of [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf design patterns] to be the architecture of systems modules (packages, classes and components) and their interconnections.  His design patterns address the four major reasons for failure of the systems:  rigidity, fragility, immobility and viscosity [http://www.objectmentor.com/resources/articles/oodmetrc.pdf]. &lt;br /&gt;
&lt;br /&gt;
Following are the list of few design principles quoted by him to avoid the pitfalls associated with unsuccessful software engineering,&lt;br /&gt;
[http://labs.cs.utt.ro/labs/ip2/html/lectures/5/lecture5.ppt Reuse/Release Equivalence Principle],&lt;br /&gt;
[http://iface.wordpress.com/2006/04/08/common-closure-principle/ Common Closure Principle],&lt;br /&gt;
[http://www.objectmentor.com/omSolutions/oops_what.html Common Reuse Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/10/acyclic-dependencies-principle/ Acyclic Dependencies Principle],&lt;br /&gt;
[http://www.objectmentor.com/resources/articles/stability.pdf Staple Dependencies Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/20/stable-abstractions-principle/ Stable Abstraction Principle].&lt;br /&gt;
&lt;br /&gt;
The objective of this article is to discuss in detail Stable Dependencies Principle. Each of the four problems discussed above can be caused by improper dependencies between the modules of the software. It is the dependency architecture that degrades the ability of the software to be maintained. The Stable Dependencies Principle is one of the principle which discusses its concern with coupling of packages, or the degree to which they rely on each other.&lt;br /&gt;
&lt;br /&gt;
=Stable Dependencies Principle=&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Principle:&lt;br /&gt;
''The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, if we want stuff to be changed, we want it to be easy, so we need to ensure our design is such that we keep all the changing stuff in one place and independent. This can be done by measuring the afferent (from outside in) and efferent (from inside out) dependencies of classes in the package.&lt;br /&gt;
&lt;br /&gt;
Packages can be classified as stable(difficult to change) and volatile(easy to change). Stable packages must not depend on Volatile one because&lt;br /&gt;
&lt;br /&gt;
- It makes Volatile packages harder to change&lt;br /&gt;
&lt;br /&gt;
- Or It may force stable packages to be changed often, in other words volatile becomes stable&lt;br /&gt;
&lt;br /&gt;
Thus we have to ensure that volatile packages must depend on stable packages.&lt;br /&gt;
&lt;br /&gt;
//does this example make sense ???&lt;br /&gt;
&lt;br /&gt;
Lets consider an example where a Class library L depends on the collection class library C which further depends on special memory allocation library M. For execution speed, API of C is modeled after API of M. Now M has a serious bug which needs to be fixed. Thus Class C needs to be updated. How does this affect all the classes here?&lt;br /&gt;
&lt;br /&gt;
- Fixing issues in Class M causes API changes in C which requires changes in the header files of Class C&lt;br /&gt;
&lt;br /&gt;
- As API of M reflects in API of C, L also has to be modified too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Stability==&lt;br /&gt;
What does stability mean? By simply goggling stability, we get definitions like resistance to change, reliability etc [http://www.answers.com/topic/stability]. Thus it roughly means &amp;quot;hard to change&amp;quot;, whereas instability means &amp;quot;easy to change&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Consider an example, in which you stand a penny on its side. Is this penny stable in that position? Mostly people would answer a no, even though it does not change its position for a very long time. Thus, stability has nothing directly to do with the frequency of change. It more relates to the amount of work required to make a change. The penny is not stable because it takes little work to topple it.&lt;br /&gt;
&lt;br /&gt;
Thus stability of a software package would depend on various factors like size, complexity, clarity, etc.  But with respect to our principle, stability focus on a different factor. A software package would be difficult to change, if it has lots of other software packages depend on upon it. Thus a package with lots of incoming dependencies is very stable because it requires a great deal of work for any change to propagate with all the dependent packages.&lt;br /&gt;
&lt;br /&gt;
==Stability and Dependencies==&lt;br /&gt;
With the above definition of stability, you don't want to increase stability of the packages as your software can not change easily then. But if the system has been designed well then hard to change packages or stable packages will not change that frequently. Thus, we need to understand the relationship between stability and dependencies. &lt;br /&gt;
&lt;br /&gt;
Consider a following example, Here package x, depends on three other packages. Thus, it is said that x is responsible to the other three packages. On other hand, x does not depend on anything, thus it does not influence any other change. It is said to be independent [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf].&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-25 on page 23)&lt;br /&gt;
&lt;br /&gt;
Another example, here package y has no packages depending upon it, thus we call it irresponsible. It is very instable package. But there are three other packages that y depends upon, so changes from these three external packages may affect it and thus we say y is dependent.&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-26 on page 23)&lt;br /&gt;
&lt;br /&gt;
Thus we need to be careful while designing packages especially lower level packages (which would have more users) and higher level packages (which would tend to have fewer users).&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=27876</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 13 zz</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=27876"/>
		<updated>2009-11-18T02:32:47Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bob Martin's Stable Dependencies Principle says, &amp;quot;The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Bob Martin=&lt;br /&gt;
&lt;br /&gt;
[http://today.java.net/pub/au/90 Robert C. Martin] (Uncle Bob) defines the domain of [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf design patterns] to be the architecture of systems modules (packages, classes and components) and their interconnections.  His design patterns address the four major reasons for failure of the systems:  rigidity, fragility, immobility and viscosity [http://www.objectmentor.com/resources/articles/oodmetrc.pdf]. &lt;br /&gt;
&lt;br /&gt;
Following are the list of few design principles quoted by him to avoid the pitfalls associated with unsuccessful software engineering,&lt;br /&gt;
[http://labs.cs.utt.ro/labs/ip2/html/lectures/5/lecture5.ppt Reuse/Release Equivalence Principle],&lt;br /&gt;
[http://iface.wordpress.com/2006/04/08/common-closure-principle/ Common Closure Principle],&lt;br /&gt;
[http://www.objectmentor.com/omSolutions/oops_what.html Common Reuse Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/10/acyclic-dependencies-principle/ Acyclic Dependencies Principle],&lt;br /&gt;
[http://www.objectmentor.com/resources/articles/stability.pdf Staple Dependencies Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/20/stable-abstractions-principle/ Stable Abstraction Principle].&lt;br /&gt;
&lt;br /&gt;
The objective of this article is to discuss in detail Stable Dependencies Principle. Each of the four problems discussed above can be caused by improper dependencies between the modules of the software. It is the dependency architecture that degrades the ability of the software to be maintained. The Stable Dependencies Principle is one of the principle which discusses its concern with coupling of packages, or the degree to which they rely on each other.&lt;br /&gt;
&lt;br /&gt;
=Stable Dependencies Principle=&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Principle:&lt;br /&gt;
''The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, if we want stuff to be changed, we want it to be easy, so we need to ensure our design is such that we keep all the changing stuff in one place and independent. This can be done by measuring the afferent (from outside in) and efferent (from inside out) dependencies of classes in the package.&lt;br /&gt;
&lt;br /&gt;
Packages can be classified as stable(difficult to change) and volatile(easy to change). Stable packages must not depend on Volatile one because&lt;br /&gt;
&lt;br /&gt;
- It makes Volatile packages harder to change&lt;br /&gt;
&lt;br /&gt;
- Or It may force stable packages to be changed often, in other words volatile becomes stable&lt;br /&gt;
&lt;br /&gt;
Thus we have to ensure that volatile packages must depend on stable packages.&lt;br /&gt;
&lt;br /&gt;
Lets consider an example where a Class library L depends on the collection class library C which further depends on special memory allocation library M. For execution speed, API of C is modeled after API of M. Now M(a volatile class here)has a serious bug which needs to be fixed. Thus Class C(a stable class)needs to be updated. How does this affect all the classes here?&lt;br /&gt;
&lt;br /&gt;
- Fixing issues in Class M causes API changes in C which requires changes in the header files of Class C&lt;br /&gt;
&lt;br /&gt;
- As API of M reflects in API of C, L also has to be modified too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Stability==&lt;br /&gt;
What does stability mean? By simply goggling stability, we get definitions like resistance to change, reliability etc [http://www.answers.com/topic/stability]. Thus it roughly means &amp;quot;hard to change&amp;quot;, whereas instability means &amp;quot;easy to change&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Consider an example, in which you stand a penny on its side. Is this penny stable in that position? Mostly people would answer a no, even though it does not change its position for a very long time. Thus, stability has nothing directly to do with the frequency of change. It more relates to the amount of work required to make a change. The penny is not stable because it takes little work to topple it.&lt;br /&gt;
&lt;br /&gt;
Thus stability of a software package would depend on various factors like size, complexity, clarity, etc.  But with respect to our principle, stability focus on a different factor. A software package would be difficult to change, if it has lots of other software packages depend on upon it. Thus a package with lots of incoming dependencies is very stable because it requires a great deal of work for any change to propagate with all the dependent packages.&lt;br /&gt;
&lt;br /&gt;
==Stability and Dependencies==&lt;br /&gt;
With the above definition of stability, you don't want to increase stability of the packages as your software can not change easily then. But if the system has been designed well then hard to change packages or stable packages will not change that frequently. Thus, we need to understand the relationship between stability and dependencies. &lt;br /&gt;
&lt;br /&gt;
Consider a following example, Here package x, depends on three other packages. Thus, it is said that x is responsible to the other three packages. On other hand, x does not depend on anything, thus it does not influence any other change. It is said to be independent [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf].&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-25 on page 23)&lt;br /&gt;
&lt;br /&gt;
Another example, here package y has no packages depending upon it, thus we call it irresponsible. It is very instable package. But there are three other packages that y depends upon, so changes from these three external packages may affect it and thus we say y is dependent.&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-26 on page 23)&lt;br /&gt;
&lt;br /&gt;
Thus we need to be careful while designing packages especially lower level packages (which would have more users) and higher level packages (which would tend to have fewer users).&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=27734</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 13 zz</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_13_zz&amp;diff=27734"/>
		<updated>2009-11-18T01:00:31Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Stable Dependencies Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bob Martin's Stable Dependencies Principle says, &amp;quot;The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Bob Martin=&lt;br /&gt;
&lt;br /&gt;
[http://today.java.net/pub/au/90 Robert C. Martin] (Uncle Bob) defines the domain of [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf design patterns] to be the architecture of systems modules (packages, classes and components) and their interconnections.  His design patterns address the four major reasons for failure of the systems:  rigidity, fragility, immobility and viscosity [http://www.objectmentor.com/resources/articles/oodmetrc.pdf]. &lt;br /&gt;
&lt;br /&gt;
Following are the list of few design principles quoted by him to avoid the pitfalls associated with unsuccessful software engineering,&lt;br /&gt;
[http://labs.cs.utt.ro/labs/ip2/html/lectures/5/lecture5.ppt Reuse/Release Equivalence Principle],&lt;br /&gt;
[http://iface.wordpress.com/2006/04/08/common-closure-principle/ Common Closure Principle],&lt;br /&gt;
[http://www.objectmentor.com/omSolutions/oops_what.html Common Reuse Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/10/acyclic-dependencies-principle/ Acyclic Dependencies Principle],&lt;br /&gt;
[http://www.objectmentor.com/resources/articles/stability.pdf Staple Dependencies Principle],&lt;br /&gt;
[http://ifacethoughts.net/2006/04/20/stable-abstractions-principle/ Stable Abstraction Principle].&lt;br /&gt;
&lt;br /&gt;
The objective of this article is to discuss in detail Stable Dependencies Principle. Each of the four problems discussed above can be caused by improper dependencies between the modules of the software. It is the dependency architecture that degrades the ability of the software to be maintained. The Stable Dependencies Principle is one of the principle which discusses its concern with coupling of packages, or the degree to which they rely on each other.&lt;br /&gt;
&lt;br /&gt;
=Stable Dependencies Principle=&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Principle:&lt;br /&gt;
''The dependencies between packages should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than it is.''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, if we want stuff to be changed, we want it to be easy, so we need to ensure our design is such that we keep all the changing stuff in one place and independent. This can be done by measuring the afferent (from outside in) and efferent (from inside out) dependencies of classes in the package.&lt;br /&gt;
&lt;br /&gt;
Packages can be classified as stable(difficult to change) and volatile(easy to change). Stable packages must not depend on Volatile one because&lt;br /&gt;
* It makes Volatile packages harder to change&lt;br /&gt;
* Or It may force stable packages to be changed often, in other words volatile becomes stable&lt;br /&gt;
&lt;br /&gt;
Thus we have to ensure that volatile packages must depend on stable packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[have to exagerate here with respect to basic definition]. To explain the principle in detail, we need to first understand few terms like stability, dependencies etc first.&lt;br /&gt;
&lt;br /&gt;
==Stability==&lt;br /&gt;
What does stability mean? By simply goggling stability, we get definitions like resistance to change, reliability etc [http://www.answers.com/topic/stability]. Thus it roughly means &amp;quot;hard to change&amp;quot;, whereas instability means &amp;quot;easy to change&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Consider an example, in which you stand a penny on its side. Is this penny stable in that position? Mostly people would answer a no, even though it does not change its position for a very long time. Thus, stability has nothing directly to do with the frequency of change. It more relates to the amount of work required to make a change. The penny is not stable because it takes little work to topple it.&lt;br /&gt;
&lt;br /&gt;
Thus stability of a software package would depend on various factors like size, complexity, clarity, etc.  But with respect to our principle, stability focus on a different factor. A software package would be difficult to change, if it has lots of other software packages depend on upon it. Thus a package with lots of incoming dependencies is very stable because it requires a great deal of work for any change to propagate with all the dependent packages.&lt;br /&gt;
&lt;br /&gt;
==Stability and Dependencies==&lt;br /&gt;
With the above definition of stability, you don't want to increase stability of the packages as your software can not change easily then. But if the system has been designed well then hard to change packages or stable packages will not change that frequently. Thus, we need to understand the relationship between stability and dependencies. &lt;br /&gt;
&lt;br /&gt;
Consider a following example, Here package x, depends on three other packages. Thus, it is said that x is responsible to the other three packages. On other hand, x does not depend on anything, thus it does not influence any other change. It is said to be independent [http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf].&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-25 on page 23)&lt;br /&gt;
&lt;br /&gt;
Another example, here package y has no packages depending upon it, thus we call it irresponsible. It is very instable package. But there are three other packages that y depends upon, so changes from these three external packages may affect it and thus we say y is dependent.&lt;br /&gt;
&lt;br /&gt;
(Could you put an image here figure 2-26 on page 23)&lt;br /&gt;
&lt;br /&gt;
Thus we need to be careful while designing packages especially lower level packages (which would have more users) and higher level packages (which would tend to have fewer users).&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24264</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24264"/>
		<updated>2009-10-09T19:25:19Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Testing Difficulties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Graphical_user_interface Graphical User Interface] is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use. They are the assumed user interface for virtually all systems development using modern technologies.They deliver the system functionality for the clients in the client/server system.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However testing systmes with GUIs becomes very difficult because of the event-driven nature of [http://en.wikipedia.org/wiki/Graphical_user_interface GUI], unsolicited events and a never ending input domain.&lt;br /&gt;
&lt;br /&gt;
The article here describes the problems associated with GUI testing and several possible patterns and tools used for [http://en.wikipedia.org/wiki/GUI_software_testing GUI Testing.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
&lt;br /&gt;
[http://www.gerrardconsulting.com/GUI/TestGui.html GUI testing] is  comparatively difficult because of the following reasons:&lt;br /&gt;
&lt;br /&gt;
#There is an infinite number of events that occur when a user is using the application. This makes it really difficult for a coder to anticipate all contexts and include  event handlers for all of them.Also the number of potential paths from feature to feature within the application is so high that the scope for programmers to make errors is dramatically increased. The ‘infinite paths’ problem also makes it extremely unlikely that they will all be tested.&lt;br /&gt;
#Unsolicited events like a LAN printer going offline and an operating system popping up a dialog box asking the user to feed more paper can occur any time.Here not only is the number of test cases high but also special test drivers may be necessary to generate such events within the operating systems.&lt;br /&gt;
#A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
#GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
#GUI environment deals with windows and user take the standard features of window management (re-size, move, maximize and minimize) for granted. These events do affect the application and thus need to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
#GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
#GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
#There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases.&lt;br /&gt;
#An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
===GUI Test Principles===&lt;br /&gt;
&lt;br /&gt;
To develop a test process which is applicable for GUI testing in general we need to follow a set of principles. These principles deal with errors involved with GUI and using the GUI to exercise tests so is very-oriented toward black-box testing.&lt;br /&gt;
&lt;br /&gt;
•	The errors can be broken down into types, and we can design tests to diagnose each type of error. So, we can channelize the efforts in the direction of testing.&lt;br /&gt;
&lt;br /&gt;
•	A divide and conquer approach helps to separate out concerns. A complex problem is broken down into a large number of simple ones thereby concentrating on designing test cases for specific types of error.&lt;br /&gt;
&lt;br /&gt;
•	Automating GUI tests is complicated as seen before. Thus we need to ensure that we include this feature only when needed in stead of  using it in general for everything.&lt;br /&gt;
&lt;br /&gt;
•	Layering as for everything helps separate complexity. Similarly layering of tests can be an effective solution as we implement the tests of individual components(low level tests) first and then test the integrated application at the end.&lt;br /&gt;
&lt;br /&gt;
•	We can use traditional techniques that are used for form based applications called black box test techniques wherever appropriate.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
The different approaches used for [http://en.wikipedia.org/wiki/GUI_software_testing GUI testing] are as follows:&lt;br /&gt;
&lt;br /&gt;
==== Capture and Replay Tool ====&lt;br /&gt;
&lt;br /&gt;
In this approach, as the name suggests,in [http://www.site.uottawa.ca/~awilliam/seg3203/Capture.ppt Capture &amp;amp; Replay] the user starts testing the web applications manually thereby invoking the events and the test software starts recording all the actions. These actions identify the respective GUI widgets and are collected in the form of events.  The recording forms the basis of automating the test for web applications which are replayed via the GUI.&lt;br /&gt;
&lt;br /&gt;
[[Image:Record.jpg|650px|thumb|center|figure 1: testing web applications with Capture &amp;amp; Replay – workflow.]]&lt;br /&gt;
&lt;br /&gt;
'''Drawbacks'''&lt;br /&gt;
&lt;br /&gt;
*As mentioned in the problems before, this can be tested only after the development has finished.&lt;br /&gt;
*A layout may change over the time and hence the test cases may become invalid owing to the changes in the physical interface.&lt;br /&gt;
*It lacks the necessary support to design the test cases and coverage criteria evaluation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller pattern.] The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs and Drivers====&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Test_stubs test stub] is a dummy software component or object used (during development and testing) to simulate the behavior of a real component. More specifically while intergrating all the modules in top to bottom approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as [http://en.wikipedia.org/wiki/Test_stubs stub.]&lt;br /&gt;
&amp;lt;pre&amp;gt; If the function A you are testing, calls another function B,then use a simplified version of function B, called a stub.&lt;br /&gt;
void function_under_test(int&amp;amp; x, int&amp;amp; y) {&lt;br /&gt;
  ...&lt;br /&gt;
  p = price(x);&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
double price(int x) {return 10.00;}&lt;br /&gt;
The value returned by function price is good enough for testing.The real price() function may not yet have been tested, or even&lt;br /&gt;
written.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Similarly, while integrating all the modules in bottom to top approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as [http://wiki.answers.com/Q/What_is_the_difference_between_stub_and_driver test driver.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;//Driver program for the function get_input.&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
void get_input(x&amp;amp; cost, int&amp;amp; y);&lt;br /&gt;
//Precondition: User is ready to enters values correctly.Postconditions: The value of cost has been set to the.&lt;br /&gt;
//wholesale cost of one item. The value of turnover has been set to the expected number of days until the item is sold.&lt;br /&gt;
int main( )&lt;br /&gt;
{ double a;&lt;br /&gt;
    int b;&lt;br /&gt;
    char ans;&lt;br /&gt;
    do    {&lt;br /&gt;
        get_input(a, b);&lt;br /&gt;
        cout.setf(ios::fixed);&lt;br /&gt;
        cout.setf(ios::showpoint);&lt;br /&gt;
        cout.precision(2);&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;a is &amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;b is &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Test again?&amp;quot;&lt;br /&gt;
             &amp;lt;&amp;lt; &amp;quot; (Type y for yes or n for no): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; ans;&lt;br /&gt;
        cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
    } while (ans == 'y' || ans == 'Y');&lt;br /&gt;
    return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
[[Image:Guitar.jpg|650px|thumb|center|Overview of the [http://guitar.sourceforge.net/ GUITAR Guitar Framework].]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
[http://wiki.github.com/aslakhellesoy/cucumber Cucumber] is a tool that can execute plain-text functional descriptions as automated tests. The language that [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] understands is called [http://wiki.github.com/aslakhellesoy/cucumber/gherkin Gherkin.] Here is an example:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Feature: Search courses&lt;br /&gt;
  In order to ensure better utilization of courses&lt;br /&gt;
  Potential students should be able to search for courses&lt;br /&gt;
&lt;br /&gt;
  Scenario: Search by topic&lt;br /&gt;
    Given there are 240 courses which do not have the topic &amp;quot;biology&amp;quot;&lt;br /&gt;
    And there are 2 courses A001, B205 that each have &amp;quot;biology&amp;quot; as one of the topics&lt;br /&gt;
    When I search for &amp;quot;biology&amp;quot;&lt;br /&gt;
    Then I should see the following courses:&lt;br /&gt;
      | Course code |&lt;br /&gt;
      | A001        |&lt;br /&gt;
      | B205        |&amp;lt;/pre&amp;gt;&lt;br /&gt;
While [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] can be thought of as a “testing” tool, the intent of the tool is to support [http://behaviour-driven.org/ BDD.] This means that the “tests” (plain text feature descriptions with scenarios) are typically written before anything else and verified by business analysts, domain experts, etc. non technical stakeholders. The production code is then written outside-in, to make the stories pass.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24234</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24234"/>
		<updated>2009-10-09T19:09:15Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Test Principles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Graphical_user_interface Graphical User Interface] is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use. They are the assumed user interface for virtually all systems development using modern technologies.They deliver the system functionality for the clients in the client/server system.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However testing systmes with GUIs becomes very difficult because of the event-driven nature of [http://en.wikipedia.org/wiki/Graphical_user_interface GUI], unsolicited events and a never ending input domain.&lt;br /&gt;
&lt;br /&gt;
The article here describes the problems associated with GUI testing and several possible patterns and tools used for [http://en.wikipedia.org/wiki/GUI_software_testing GUI Testing.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
&lt;br /&gt;
GUI testing is  comparatively difficult because of the following reasons:&lt;br /&gt;
&lt;br /&gt;
#There is an infinite number of events that occur when a user is using the application. This makes it really difficult for a coder to anticipate all contexts and include  event handlers for all of them.Also the number of potential paths from feature to feature within the application is so high that the scope for programmers to make errors is dramatically increased. The ‘infinite paths’ problem also makes it extremely unlikely that they will all be tested.&lt;br /&gt;
#Unsolicited events like a LAN printer going offline and an operating system popping up a dialog box asking the user to feed more paper can occur any time.Here not only is the number of test cases high but also special test drivers may be necessary to generate such events within the operating systems.&lt;br /&gt;
#A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
#GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
#GUI environment deals with windows and user take the standard features of window management (re-size, move, maximize and minimize) for granted. These events do affect the application and thus need to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
#GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
#GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
#There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases.&lt;br /&gt;
#An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
===GUI Test Principles===&lt;br /&gt;
&lt;br /&gt;
To develop a test process which is applicable for GUI testing in general we need to follow a set of principles. These principles deal with errors involved with GUI and using the GUI to exercise tests so is very-oriented toward black-box testing.&lt;br /&gt;
&lt;br /&gt;
•	The errors can be broken down into types, and we can design tests to diagnose each type of error. So, we can channelize the efforts in the direction of testing.&lt;br /&gt;
&lt;br /&gt;
•	A divide and conquer approach helps to separate out concerns. A complex problem is broken down into a large number of simple ones thereby concentrating on designing test cases for specific types of error.&lt;br /&gt;
&lt;br /&gt;
•	Automating GUI tests is complicated as seen before. Thus we need to ensure that we include this feature only when needed in stead of  using it in general for everything.&lt;br /&gt;
&lt;br /&gt;
•	Layering as for everything helps separate complexity. Similarly layering of tests can be an effective solution as we implement the tests of individual components(low level tests) first and then test the integrated application at the end.&lt;br /&gt;
&lt;br /&gt;
•	We can use traditional techniques that are used for form based applications called black box test techniques wherever appropriate.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
The different approaches used for [http://en.wikipedia.org/wiki/GUI_software_testing GUI testing] are as follows:&lt;br /&gt;
&lt;br /&gt;
==== Capture and Replay Tool ====&lt;br /&gt;
&lt;br /&gt;
In this approach, as the name suggests, the user starts testing the web applications manually thereby invoking the events and the test software starts recording all the actions. These actions identify the respective GUI widgets and are collected in the form of events.  The recording forms the basis of automating the test for web applications which are replayed via the GUI.&lt;br /&gt;
&lt;br /&gt;
[[Image:Record.jpg|650px|thumb|center|figure 1: testing web applications with Capture &amp;amp; Replay – workflow.]]&lt;br /&gt;
&lt;br /&gt;
'''Drawbacks'''&lt;br /&gt;
&lt;br /&gt;
*As mentioned in the problems before, this can be tested only after the development has finished.&lt;br /&gt;
*A layout may change over the time and hence the test cases may become invalid owing to the changes in the physical interface.&lt;br /&gt;
*It lacks the necessary support to design the test cases and coverage criteria evaluation.&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller pattern.] The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs and Drivers====&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Test_stubs test stub] is a dummy software component or object used (during development and testing) to simulate the behavior of a real component. More specifically while intergrating all the modules in top to bottom approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as [http://en.wikipedia.org/wiki/Test_stubs stub.]&lt;br /&gt;
&amp;lt;pre&amp;gt; If the function A you are testing, calls another function B,then use a simplified version of function B, called a stub.&lt;br /&gt;
void function_under_test(int&amp;amp; x, int&amp;amp; y) {&lt;br /&gt;
  ...&lt;br /&gt;
  p = price(x);&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
double price(int x) {return 10.00;}&lt;br /&gt;
The value returned by function price is good enough for testing.The real price() function may not yet have been tested, or even&lt;br /&gt;
written.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Similarly, while integrating all the modules in bottom to top approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as [http://wiki.answers.com/Q/What_is_the_difference_between_stub_and_driver test driver.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;//Driver program for the function get_input.&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
void get_input(x&amp;amp; cost, int&amp;amp; y);&lt;br /&gt;
//Precondition: User is ready to enters values correctly.Postconditions: The value of cost has been set to the.&lt;br /&gt;
//wholesale cost of one item. The value of turnover has been set to the expected number of days until the item is sold.&lt;br /&gt;
int main( )&lt;br /&gt;
{ double a;&lt;br /&gt;
    int b;&lt;br /&gt;
    char ans;&lt;br /&gt;
    do    {&lt;br /&gt;
        get_input(a, b);&lt;br /&gt;
        cout.setf(ios::fixed);&lt;br /&gt;
        cout.setf(ios::showpoint);&lt;br /&gt;
        cout.precision(2);&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;a is &amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;b is &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Test again?&amp;quot;&lt;br /&gt;
             &amp;lt;&amp;lt; &amp;quot; (Type y for yes or n for no): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; ans;&lt;br /&gt;
        cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
    } while (ans == 'y' || ans == 'Y');&lt;br /&gt;
    return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
[[Image:Guitar.jpg|650px|thumb|center|Overview of the [http://guitar.sourceforge.net/ GUITAR Guitar Framework].]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
[http://wiki.github.com/aslakhellesoy/cucumber Cucumber] is a tool that can execute plain-text functional descriptions as automated tests. The language that [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] understands is called [http://wiki.github.com/aslakhellesoy/cucumber/gherkin Gherkin.] Here is an example:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Feature: Search courses&lt;br /&gt;
  In order to ensure better utilization of courses&lt;br /&gt;
  Potential students should be able to search for courses&lt;br /&gt;
&lt;br /&gt;
  Scenario: Search by topic&lt;br /&gt;
    Given there are 240 courses which do not have the topic &amp;quot;biology&amp;quot;&lt;br /&gt;
    And there are 2 courses A001, B205 that each have &amp;quot;biology&amp;quot; as one of the topics&lt;br /&gt;
    When I search for &amp;quot;biology&amp;quot;&lt;br /&gt;
    Then I should see the following courses:&lt;br /&gt;
      | Course code |&lt;br /&gt;
      | A001        |&lt;br /&gt;
      | B205        |&amp;lt;/pre&amp;gt;&lt;br /&gt;
While [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] can be thought of as a “testing” tool, the intent of the tool is to support [http://behaviour-driven.org/ BDD.] This means that the “tests” (plain text feature descriptions with scenarios) are typically written before anything else and verified by business analysts, domain experts, etc. non technical stakeholders. The production code is then written outside-in, to make the stories pass.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24233</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24233"/>
		<updated>2009-10-09T19:08:58Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Testing Difficulties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Graphical_user_interface Graphical User Interface] is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use. They are the assumed user interface for virtually all systems development using modern technologies.They deliver the system functionality for the clients in the client/server system.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However testing systmes with GUIs becomes very difficult because of the event-driven nature of [http://en.wikipedia.org/wiki/Graphical_user_interface GUI], unsolicited events and a never ending input domain.&lt;br /&gt;
&lt;br /&gt;
The article here describes the problems associated with GUI testing and several possible patterns and tools used for [http://en.wikipedia.org/wiki/GUI_software_testing GUI Testing.]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
&lt;br /&gt;
GUI testing is  comparatively difficult because of the following reasons:&lt;br /&gt;
&lt;br /&gt;
#There is an infinite number of events that occur when a user is using the application. This makes it really difficult for a coder to anticipate all contexts and include  event handlers for all of them.Also the number of potential paths from feature to feature within the application is so high that the scope for programmers to make errors is dramatically increased. The ‘infinite paths’ problem also makes it extremely unlikely that they will all be tested.&lt;br /&gt;
#Unsolicited events like a LAN printer going offline and an operating system popping up a dialog box asking the user to feed more paper can occur any time.Here not only is the number of test cases high but also special test drivers may be necessary to generate such events within the operating systems.&lt;br /&gt;
#A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
#GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
#GUI environment deals with windows and user take the standard features of window management (re-size, move, maximize and minimize) for granted. These events do affect the application and thus need to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
#GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
#GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
#There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases.&lt;br /&gt;
#An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
===GUI Test Principles===&lt;br /&gt;
&lt;br /&gt;
To develop a test process which is applicable for GUI testing in general we need to follow a set of principles. These principles deal with errors involved with GUI and using the GUI to exercise tests so is very-oriented toward black-box testing.&lt;br /&gt;
&lt;br /&gt;
•	The errors csn be broken down into types, and we can design tests to diagnose each type of error. So, we can channelize the efforts in the direction of testing.&lt;br /&gt;
&lt;br /&gt;
•	A divide and conquer approach helps to separate out concerns. A complex problem is broken down into a large number of simple ones thereby concentrating on designing test cases for specific types of error.&lt;br /&gt;
&lt;br /&gt;
•	Automating GUI tests is complicated as seen before. Thus we need to ensure that we include this feature only when needed in stead of  using it in general for everything.&lt;br /&gt;
&lt;br /&gt;
•	Layering as for everything helps separate complexity. Similarly layering of tests can be an effective solution as we implement the tests of individual components(low level tests) first and then test the integrated application at the end.&lt;br /&gt;
&lt;br /&gt;
•	We can use traditional techniques that are used for form based applications called black box test techniques wherever appropriate.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
The different approaches used for [http://en.wikipedia.org/wiki/GUI_software_testing GUI testing] are as follows:&lt;br /&gt;
&lt;br /&gt;
==== Capture and Replay Tool ====&lt;br /&gt;
&lt;br /&gt;
In this approach, as the name suggests, the user starts testing the web applications manually thereby invoking the events and the test software starts recording all the actions. These actions identify the respective GUI widgets and are collected in the form of events.  The recording forms the basis of automating the test for web applications which are replayed via the GUI.&lt;br /&gt;
&lt;br /&gt;
[[Image:Record.jpg|650px|thumb|center|figure 1: testing web applications with Capture &amp;amp; Replay – workflow.]]&lt;br /&gt;
&lt;br /&gt;
'''Drawbacks'''&lt;br /&gt;
&lt;br /&gt;
*As mentioned in the problems before, this can be tested only after the development has finished.&lt;br /&gt;
*A layout may change over the time and hence the test cases may become invalid owing to the changes in the physical interface.&lt;br /&gt;
*It lacks the necessary support to design the test cases and coverage criteria evaluation.&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller Model View Controller pattern.] The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs and Drivers====&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Test_stubs test stub] is a dummy software component or object used (during development and testing) to simulate the behavior of a real component. More specifically while intergrating all the modules in top to bottom approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as [http://en.wikipedia.org/wiki/Test_stubs stub.]&lt;br /&gt;
&amp;lt;pre&amp;gt; If the function A you are testing, calls another function B,then use a simplified version of function B, called a stub.&lt;br /&gt;
void function_under_test(int&amp;amp; x, int&amp;amp; y) {&lt;br /&gt;
  ...&lt;br /&gt;
  p = price(x);&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
double price(int x) {return 10.00;}&lt;br /&gt;
The value returned by function price is good enough for testing.The real price() function may not yet have been tested, or even&lt;br /&gt;
written.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Similarly, while integrating all the modules in bottom to top approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as [http://wiki.answers.com/Q/What_is_the_difference_between_stub_and_driver test driver.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;//Driver program for the function get_input.&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
void get_input(x&amp;amp; cost, int&amp;amp; y);&lt;br /&gt;
//Precondition: User is ready to enters values correctly.Postconditions: The value of cost has been set to the.&lt;br /&gt;
//wholesale cost of one item. The value of turnover has been set to the expected number of days until the item is sold.&lt;br /&gt;
int main( )&lt;br /&gt;
{ double a;&lt;br /&gt;
    int b;&lt;br /&gt;
    char ans;&lt;br /&gt;
    do    {&lt;br /&gt;
        get_input(a, b);&lt;br /&gt;
        cout.setf(ios::fixed);&lt;br /&gt;
        cout.setf(ios::showpoint);&lt;br /&gt;
        cout.precision(2);&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;a is &amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;b is &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Test again?&amp;quot;&lt;br /&gt;
             &amp;lt;&amp;lt; &amp;quot; (Type y for yes or n for no): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; ans;&lt;br /&gt;
        cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
    } while (ans == 'y' || ans == 'Y');&lt;br /&gt;
    return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
[[Image:Guitar.jpg|650px|thumb|center|Overview of the [http://guitar.sourceforge.net/ GUITAR Guitar Framework].]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
[http://wiki.github.com/aslakhellesoy/cucumber Cucumber] is a tool that can execute plain-text functional descriptions as automated tests. The language that [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] understands is called [http://wiki.github.com/aslakhellesoy/cucumber/gherkin Gherkin.] Here is an example:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Feature: Search courses&lt;br /&gt;
  In order to ensure better utilization of courses&lt;br /&gt;
  Potential students should be able to search for courses&lt;br /&gt;
&lt;br /&gt;
  Scenario: Search by topic&lt;br /&gt;
    Given there are 240 courses which do not have the topic &amp;quot;biology&amp;quot;&lt;br /&gt;
    And there are 2 courses A001, B205 that each have &amp;quot;biology&amp;quot; as one of the topics&lt;br /&gt;
    When I search for &amp;quot;biology&amp;quot;&lt;br /&gt;
    Then I should see the following courses:&lt;br /&gt;
      | Course code |&lt;br /&gt;
      | A001        |&lt;br /&gt;
      | B205        |&amp;lt;/pre&amp;gt;&lt;br /&gt;
While [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] can be thought of as a “testing” tool, the intent of the tool is to support [http://behaviour-driven.org/ BDD.] This means that the “tests” (plain text feature descriptions with scenarios) are typically written before anything else and verified by business analysts, domain experts, etc. non technical stakeholders. The production code is then written outside-in, to make the stories pass.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24171</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24171"/>
		<updated>2009-10-09T18:18:45Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Different Approaches used for GUI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A Graphical User Interface is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However due to its nature there are many difficulties that arise with GUI testing.&lt;br /&gt;
&lt;br /&gt;
GUIs are the assumed user interface for virtually all systems development using modern technologies. Graphical User Interface deliver the system functionality for the clients in the client/server system. Testing systems become more complex with GUI because of the event-driven nature of GUI, unsolicited events and a never ending input domain. Thus there aren’t any developed or implemented testing patterns for GUI testing.&lt;br /&gt;
&lt;br /&gt;
The article here describes the problems associated with GUI testing and several possible patterns and tools used for GUI Testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
   &lt;br /&gt;
As GUI hides the complexity from the user and from the programmers too on using development frameworks but the hidden issues become really obvious when it comes to testing. GUI testing is much more difficult comparatively because&lt;br /&gt;
&lt;br /&gt;
1.	There is an infinite number of unnoticed events that occur when a user is using the application making. This makes it really difficult for a code to include all of them and to complicate the issue further special test drivers are needed in the Operating system to generate such events. For instance when a printer in a LAN is switched off, and the operating system puts up a dialog box inviting the user to feed more paper into the printer. &lt;br /&gt;
&lt;br /&gt;
2.	A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
&lt;br /&gt;
3.	GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
&lt;br /&gt;
4.	GUI environment deals with windows and user take the standard features of window management (re-size, move, maximize and minimize) for granted. These events do affect the application and thus needs to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
&lt;br /&gt;
5.	GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
&lt;br /&gt;
6.	GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
&lt;br /&gt;
7.	There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases&lt;br /&gt;
&lt;br /&gt;
8.	An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
The different approaches used for GUI testing are as follows&lt;br /&gt;
&lt;br /&gt;
==== Capture and Replay Tool ====&lt;br /&gt;
&lt;br /&gt;
In this approach, as the name suggests, the user starts testing the web applications manually thereby invoking the events and the test software starts recording all the actions. These actions identify the respective GUI widgets and are collected in the form of events.  The recording forms the basis of automating the test for web applications which are replayed via the GUI.&lt;br /&gt;
&lt;br /&gt;
A simple workflow explaining the test approach is shown below&lt;br /&gt;
&lt;br /&gt;
PLZ INSERT IMAGE&lt;br /&gt;
&lt;br /&gt;
figure 1 testing web applications with Capture &amp;amp; Replay – workflow&lt;br /&gt;
&lt;br /&gt;
'''Drawbacks'''&lt;br /&gt;
&lt;br /&gt;
•	As mentioned in the problems before, this can be tested only after the development has finished.&lt;br /&gt;
&lt;br /&gt;
•	A layout may change over the time and hence the test cases may become invalid owing to the changes in the physical interface.&lt;br /&gt;
&lt;br /&gt;
•	It lacks the necessary support to design the test cases and coverage criteria evaluation.&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the Model View Controller pattern. The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs and Drivers====&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Test_stubs test stub] is a dummy software component or object used (during development and testing) to simulate the behavior of a real component. More specifically while intergrating all the modules in top to bottom approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as [http://en.wikipedia.org/wiki/Test_stubs stub.]&lt;br /&gt;
&amp;lt;pre&amp;gt; If the function A you are testing, calls another function B,then use a simplified version of function B, called a stub.&lt;br /&gt;
void function_under_test(int&amp;amp; x, int&amp;amp; y) {&lt;br /&gt;
  ...&lt;br /&gt;
  p = price(x);&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
double price(int x) {return 10.00;}&lt;br /&gt;
The value returned by function price is good enough for testing.The real price() function may not yet have been tested, or even&lt;br /&gt;
written.&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Similarly, while integrating all the modules in bottom to top approach whenever any mandatory module is missing that module is replaced by a temperoary program which is called as driver.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;//Driver program for the function get_input.&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
void get_input(x&amp;amp; cost, int&amp;amp; y);&lt;br /&gt;
//Precondition: User is ready to enters values correctly.Postconditions: The value of cost has been set to the.&lt;br /&gt;
//wholesale cost of one item. The value of turnover has been set to the expected number of days until the item is sold.&lt;br /&gt;
int main( )&lt;br /&gt;
{ double a;&lt;br /&gt;
    int b;&lt;br /&gt;
    char ans;&lt;br /&gt;
    do    {&lt;br /&gt;
        get_input(a, b);&lt;br /&gt;
        cout.setf(ios::fixed);&lt;br /&gt;
        cout.setf(ios::showpoint);&lt;br /&gt;
        cout.precision(2);&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;a is &amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;b is &amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Test again?&amp;quot;&lt;br /&gt;
             &amp;lt;&amp;lt; &amp;quot; (Type y for yes or n for no): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; ans;&lt;br /&gt;
        cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
    } while (ans == 'y' || ans == 'Y');&lt;br /&gt;
    return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
[[Image:Guitar.jpg|650px|thumb|center|Overview of the [http://guitar.sourceforge.net/ GUITAR Guitar Framework].]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
[http://wiki.github.com/aslakhellesoy/cucumber Cucumber] is a tool that can execute plain-text functional descriptions as automated tests. The language that [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] understands is called [http://wiki.github.com/aslakhellesoy/cucumber/gherkin Gherkin.] Here is an example:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Feature: Search courses&lt;br /&gt;
  In order to ensure better utilization of courses&lt;br /&gt;
  Potential students should be able to search for courses&lt;br /&gt;
&lt;br /&gt;
  Scenario: Search by topic&lt;br /&gt;
    Given there are 240 courses which do not have the topic &amp;quot;biology&amp;quot;&lt;br /&gt;
    And there are 2 courses A001, B205 that each have &amp;quot;biology&amp;quot; as one of the topics&lt;br /&gt;
    When I search for &amp;quot;biology&amp;quot;&lt;br /&gt;
    Then I should see the following courses:&lt;br /&gt;
      | Course code |&lt;br /&gt;
      | A001        |&lt;br /&gt;
      | B205        |&amp;lt;/pre&amp;gt;&lt;br /&gt;
While [http://wiki.github.com/aslakhellesoy/cucumber Cucumber] can be thought of as a “testing” tool, the intent of the tool is to support [http://behaviour-driven.org/ BDD.] This means that the “tests” (plain text feature descriptions with scenarios) are typically written before anything else and verified by business analysts, domain experts, etc. non technical stakeholders. The production code is then written outside-in, to make the stories pass.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24017</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24017"/>
		<updated>2009-10-09T16:41:31Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A Graphical User Interface is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However due to its nature there are many difficulties that arise with GUI testing.&lt;br /&gt;
&lt;br /&gt;
GUIs are the assumed user interface for virtually all systems development using modern technologies. Graphical User Interface deliver the system functionality for the clients in the client/server system. Testing systems become more complex with GUI because of the event-driven nature of GUI, unsolicited events and a never ending input domain. Thus there aren’t any developed or implemented testing patterns for GUI testing.&lt;br /&gt;
&lt;br /&gt;
The article here describes the problems associated with GUI testing and several possible patterns and tools for the testing inputs &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
   &lt;br /&gt;
As GUI hides the complexity from the user and from the programmers too on using development frameworks but the hidden issues become really obvious when it comes to testing. GUI testing is much more difficult comparatively because&lt;br /&gt;
&lt;br /&gt;
1.	There is an infinite number of unnoticed events that occur when a user is using the application making. This makes it really difficult for a code to include all of them and to complicate the issue further special test drivers are needed in the Operating system to generate such events. For instance when a printer in a LAN is switched off, and the operating system puts up a dialog box inviting the user to feed more paper into the printer. &lt;br /&gt;
&lt;br /&gt;
2.	A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
&lt;br /&gt;
3.	GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
&lt;br /&gt;
4.	GUI environment deals with windows and user take the standard features of window management (re-size, move, maximize and minimize) for granted. These events do affect the application and thus needs to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
&lt;br /&gt;
5.	GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
&lt;br /&gt;
6.	GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
&lt;br /&gt;
7.	There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases&lt;br /&gt;
&lt;br /&gt;
8.	An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the Model View Controller pattern. The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
[[Image:Guitar.jpg|650px|thumb|center|Overview of the [http://guitar.sourceforge.net/ GUITAR Guitar Framework].]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
Cucumber is a tool that can execute plain-text functional descriptions as automated tests. The language that Cucumber understands is called Gherkin. Here is an example:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Feature: Search courses&lt;br /&gt;
  In order to ensure better utilization of courses&lt;br /&gt;
  Potential students should be able to search for courses&lt;br /&gt;
&lt;br /&gt;
  Scenario: Search by topic&lt;br /&gt;
    Given there are 240 courses which do not have the topic &amp;quot;biology&amp;quot;&lt;br /&gt;
    And there are 2 courses A001, B205 that each have &amp;quot;biology&amp;quot; as one of the topics&lt;br /&gt;
    When I search for &amp;quot;biology&amp;quot;&lt;br /&gt;
    Then I should see the following courses:&lt;br /&gt;
      | Course code |&lt;br /&gt;
      | A001        |&lt;br /&gt;
      | B205        |&amp;lt;/pre&amp;gt;&lt;br /&gt;
While Cucumber can be thought of as a “testing” tool, the intent of the tool is to support BDD. This means that the “tests” (plain text feature descriptions with scenarios) are typically written before anything else and verified by business analysts, domain experts, etc. non technical stakeholders. The production code is then written outside-in, to make the stories pass.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24005</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24005"/>
		<updated>2009-10-09T16:35:02Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Testing Difficulties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A Graphical User Interface is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However due to its nature there are many difficulties that arise with GUI testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
   &lt;br /&gt;
As GUI hides the complexity from the user and from the programmers too on using development frameworks but the hidden issues become really obvious when it comes to testing. GUI testing is much more difficult comparatively because&lt;br /&gt;
&lt;br /&gt;
1.	There is an infinite number of unnoticed events that occur when a user is using the application making. This makes it really difficult for a code to include all of them and to complicate the issue further special test drivers are needed in the Operating system to generate such events. For instance when a printer in a LAN is switched off, and the operating system puts up a dialog box inviting the user to feed more paper into the printer. &lt;br /&gt;
&lt;br /&gt;
2.	A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
&lt;br /&gt;
3.	GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
&lt;br /&gt;
4.	GUI environment deals with windows and user take the standard features of window management (re-size, move, maximize and minimize) for granted. These events do affect the application and thus needs to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
&lt;br /&gt;
5.	GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
&lt;br /&gt;
6.	GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
&lt;br /&gt;
7.	There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases&lt;br /&gt;
&lt;br /&gt;
8.	An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the Model View Controller pattern. The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24003</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24003"/>
		<updated>2009-10-09T16:34:01Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Testing Difficulties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A Graphical User Interface is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However due to its nature there are many difficulties that arise with GUI testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
   &lt;br /&gt;
As GUI hides the complexity from the user and from the programmers too on using development frameworks but the hidden issues become really obvious when it comes to testing. GUI testing is much more difficult comparatively because&lt;br /&gt;
&lt;br /&gt;
1.	There is an infinite number of unnoticed events that occurring anytime the user is using the application making it very difficult for a code to include all of them and to complicate the issue further special test drivers are needed in the Operating system to generate such events. For instance when a printer in a LAN is switched off, and the operating system puts up a dialog box inviting the user to feed more paper into the printer. &lt;br /&gt;
&lt;br /&gt;
2.	A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
&lt;br /&gt;
3.	GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
&lt;br /&gt;
4.	GUI environment deals with windows and user take the standard features of window management (resize, move, maximize and minimize) for granted. These events do affect the application and thus needs to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
&lt;br /&gt;
5.	GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
&lt;br /&gt;
6.	GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
&lt;br /&gt;
7.	There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases&lt;br /&gt;
&lt;br /&gt;
8.	An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the Model View Controller pattern. The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24001</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=24001"/>
		<updated>2009-10-09T16:32:42Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Testing Difficulties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A Graphical User Interface is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However due to its nature there are many difficulties that arise with GUI testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
   &lt;br /&gt;
As GUI hides the complexity from the user and from the programmers too on using development frameworks but the hidden issues become really obvious when it comes to testing. GUI testing is much more difficult comparatively because&lt;br /&gt;
&lt;br /&gt;
1.	There are an undefined number of unnoticed events that can occur anytime thus making it very difficult for a code to include all of them and to complicate the issue further special test drivers are needed in the Operating system to generate such events. For instance when a printer in a LAN is switched off, and the operating system puts up a dialog box inviting the user to feed more paper into the printer. &lt;br /&gt;
&lt;br /&gt;
2.	A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
&lt;br /&gt;
3.	GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
&lt;br /&gt;
4.	GUI environment deals with windows and user take the standard features of window management (resize, move, maximize and minimize) for granted. These events do affect the application and thus needs to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
&lt;br /&gt;
5.	GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverse engineer making life miserable for him.&lt;br /&gt;
&lt;br /&gt;
6.	GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happen you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
&lt;br /&gt;
7.	There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases&lt;br /&gt;
&lt;br /&gt;
8.	An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the Model View Controller pattern. The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=23999</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=23999"/>
		<updated>2009-10-09T16:32:05Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Testing Difficulties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A Graphical User Interface is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However due to its nature there are many difficulties that arise with GUI testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
   &lt;br /&gt;
As GUI hides the complexity from the user and from the programmers too on using development frameworks but the hidden issues become really obvious when it comes to testing. GUI testing is much more difficult comparatively because&lt;br /&gt;
&lt;br /&gt;
1.	There are an undefined number of unnoticed events that can occur anytime thus making it very difficult for a code to include all of them and to complicate the issue further special test drivers are needed in the Operating system to generate such events. For instance when a printer in a LAN is switched off, and the operating system puts up a dialog box inviting the user to feed more paper into the printer. &lt;br /&gt;
&lt;br /&gt;
2.	A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. This means that the application code needs to check the next event irrespective of whether it’s meant for it. This event driven approach makes testing an extremely complicated issue.&lt;br /&gt;
&lt;br /&gt;
3.	GUIs are better suited to object oriented paradigm. A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes which means a larger set of test cases to deal with.&lt;br /&gt;
&lt;br /&gt;
4.	GUI environment deals with windows and user take the standard features of window management (resize, move, maximize and minimize) for granted. These events do affect the application and thus needs to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
&lt;br /&gt;
5.	GUI tests can’t be written until you finish the implementation phase. This is an issue considering the fact that there may be contractors developing the GUI who may not be available for testing thus forcing the tester to reverese engineer making life miserable for him.&lt;br /&gt;
&lt;br /&gt;
6.	GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happened you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
&lt;br /&gt;
7.	There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases&lt;br /&gt;
&lt;br /&gt;
8.	An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is the Model View Controller pattern. The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
*Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
*View - obtains data from the model and presents it to the user.&lt;br /&gt;
*Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar GUI Testing Framework====&lt;br /&gt;
&lt;br /&gt;
[http://guitar.sourceforge.net/ GUITAR] is an extensible framework for testing software applications. It presents a unified solution to the software testing problem. [http://guitar.sourceforge.net/ GUITAR’s] architecture allows testers to create new “process plug-ins” (i.e., tools/techniques/algorithms) to perform different testing activities. It currently contains a rich collection of plug-ins that may be used to test an application through its graphical user interface. For example, the “test case generator” plug-in, a tester can automatically generate various types of test cases for the Application Under Test (AUT);  the “replayer” plug-in may be used to execute these test cases on the AUT automatically; during the various development phases of the AUT, the “regression tester” plug-in can be used to efficiently perform regression testing on the AUT.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=23988</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 10 Gui Testing Frameworks aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_10_Gui_Testing_Frameworks_aa&amp;diff=23988"/>
		<updated>2009-10-09T16:23:40Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* GUI Testing Difficulties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=='''GUI TESTING FRAMEWORKS'''==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
A Graphical User Interface is a program interface that takes advantage of the computer's  graphics capabilities to make the program easier to use.Ideally, user interfaces should only be thin shells on top of the next layer in an application displaying information in a useful fashion, and passing user input as quickly as possible to some code that knows what to do with it.However due to its nature there are many difficulties that arise with GUI testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===GUI Testing Difficulties===&lt;br /&gt;
   &lt;br /&gt;
The following difficulties arise while testing the GUIs:&lt;br /&gt;
&lt;br /&gt;
As GUI hides the complexity from the user and from the programmers too on using development frameworks but the hidden issues become really obvious when it comes to testing. GUI testing is much more difficult comparatively because&lt;br /&gt;
&lt;br /&gt;
1.	There are an undefined number of unnoticed events that can occur anytime thus making it very difficult for a code to include all of them and to complicate the issue further special test drivers are needed in the Operating system to generate such events. For instance when a printer in a LAN is switched off, and the operating system puts up a dialog box inviting the user to feed more paper into the printer. &lt;br /&gt;
&lt;br /&gt;
2.	A major problem involved with GUI testing is a large number of input spaces wherein user can click on any point on the screen at any time and there may be an undefined number of applications running simultaneously. Thus handling of these events becomes an extremely complicated issue.&lt;br /&gt;
&lt;br /&gt;
3.	A large number of methods and attributes are associated with each object that deals with GUI events thus making it even more complex. For example even for a simple text box there may be around thirty attributes.&lt;br /&gt;
&lt;br /&gt;
4.	GUI environment deals with windows and user take the standard features of window management (resize, move, maximize and minimize) for granted. These events do affect the application and thus needs to be taken care of. For instance testing backward, forward, refresh etc makes testing a challenging task.&lt;br /&gt;
&lt;br /&gt;
5.	GUI tests can’t be written until you finish the implementation phase.&lt;br /&gt;
&lt;br /&gt;
6.	GUIs involve complex dependencies thereby resulting in a synchronization problem. For example if an application involves two windows one showing a portfolio of your stock market investments and the other making transactions then as soon as you buy a stock the user would like to see it in the portfolio, now for that to happened you need the two windows to be synchronized. With a large number of windows involved with the application the dependencies are extremely complex. Now a user may also want his transaction history window, the order book window etc be synchronized too with the transaction window. This shows the problem of a large number of dependencies which makes synchronization complicated.&lt;br /&gt;
&lt;br /&gt;
7.	There can be many ways a user can reach a point in the application which may be a keyboard shortcut, function keys or mouse movements creating a never ending list of test cases&lt;br /&gt;
&lt;br /&gt;
8.	An infinite input domain problem is an issue wherein a user has an option of clicking anywhere on the window in view and entering data in any order he wishes too. This may result in a n factorial ways of inputting data where n is the number of fields in the GUI application. Greater the n larger the input domain and more the complexity for a tester.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Different Approaches used for GUI Testing===&lt;br /&gt;
&lt;br /&gt;
====MVC Design Pattern====&lt;br /&gt;
&lt;br /&gt;
It is typically more difficult to perform automated tests on code residing in the user interface, and the more logic contained there, the greater the need for automated testing. The solution is to add a new level of indeirection. The basic idea behind this approach is to add a new level of indirection behind the user interface and the domain model with the intention of isolating UI changes and prevent them from requiring changes to the domain logic of the application.&lt;br /&gt;
MVC divides an application into three concerns: &lt;br /&gt;
•	Model - Encapsulates core application data and functionality domain logic.&lt;br /&gt;
•	View - obtains data from the model and presents it to the user.&lt;br /&gt;
•	Controller - receives and translates input to requests on the model or the view.&lt;br /&gt;
It pulls the complex part of the user interface code into a library that can be unit-tested, thus making GUI testing simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Test Stubs====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Capture and Replay Tool====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Guitar====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====Cucumber====&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Conclusion===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22386</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22386"/>
		<updated>2009-09-29T02:34:02Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* C# */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial 9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342 10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog 12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are NUnit, csUnit, Pex, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Nunit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''PEX'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take adavntage of the .NET languages.   It is a free open source unit testing tool for all the test-driven development .NET languages including C#.||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run individual test cases. It has been inspired from JUnit and can be used as an add-in along with the NUnit&lt;br /&gt;
&lt;br /&gt;
||It is a tool to generate efficient unit tests with a high code coverage and are converted to C# automatically. It determines the relevant test inputs for the code hunting for boundary conditions, exceptions and assertion failures. Pex enables Parameterized Unit Testing, an extension of Unit Testing that reduces test maintenance costs. &lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||http://research.microsoft.com/en-us/um/redmond/projects/pex/wiki/The%20Hello%20World%20of%20Pex.html&lt;br /&gt;
|-&lt;br /&gt;
| Used as ||Testing framework, GUI and console tool||Testing Framework ,Console tool and VS.NET Add In||It supports NUnit, MbUnit and xUnit.net.Extensions for these test frameworks can be downloaded from the Pex Extensions Project.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
'''parameterized testing''' - . A parameterized unit test is simply a method that takes parameters, calls the code under test, and states assertions.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22385</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22385"/>
		<updated>2009-09-29T02:33:22Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* APPENDIX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial 9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342 10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog 12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are NUnit, csUnit, Pex, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Nunit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''PEX'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take adavntage of the .NET languages.   It is a free open source unit testing tool for all the test-driven development .NET languages including C#.||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run individual test cases. It has been inspired from JUnit and can be used as an add-in along with the NUnit&lt;br /&gt;
&lt;br /&gt;
||It is a tool to generate efficient unit tests with a high code coverage and are converted to C# automatically. It determines the relevant test inputs for the code hunting for boundary conditions, exceptions and assertion failures. Pex enables Parameterized Unit Testing, an extension of Unit Testing that reduces test maintenance costs. A parameterized unit test is simply a method that takes parameters, calls the code under test, and states assertions.&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||http://research.microsoft.com/en-us/um/redmond/projects/pex/wiki/The%20Hello%20World%20of%20Pex.html&lt;br /&gt;
|-&lt;br /&gt;
| Used as ||Testing framework, GUI and console tool||Testing Framework ,Console tool and VS.NET Add In||It supports NUnit, MbUnit and xUnit.net.Extensions for these test frameworks can be downloaded from the Pex Extensions Project.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
'''parameterized testing''' - . A parameterized unit test is simply a method that takes parameters, calls the code under test, and states assertions.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22383</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22383"/>
		<updated>2009-09-29T02:31:18Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* C# */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial 9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342 10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog 12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are NUnit, csUnit, Pex, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Nunit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''PEX'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take adavntage of the .NET languages.   It is a free open source unit testing tool for all the test-driven development .NET languages including C#.||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run individual test cases. It has been inspired from JUnit and can be used as an add-in along with the NUnit&lt;br /&gt;
&lt;br /&gt;
||It is a tool to generate efficient unit tests with a high code coverage and are converted to C# automatically. It determines the relevant test inputs for the code hunting for boundary conditions, exceptions and assertion failures. Pex enables Parameterized Unit Testing, an extension of Unit Testing that reduces test maintenance costs. A parameterized unit test is simply a method that takes parameters, calls the code under test, and states assertions.&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||http://research.microsoft.com/en-us/um/redmond/projects/pex/wiki/The%20Hello%20World%20of%20Pex.html&lt;br /&gt;
|-&lt;br /&gt;
| Used as ||Testing framework, GUI and console tool||Testing Framework ,Console tool and VS.NET Add In||It supports NUnit, MbUnit and xUnit.net.Extensions for these test frameworks can be downloaded from the Pex Extensions Project.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22379</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=22379"/>
		<updated>2009-09-29T02:22:30Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* C# */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial 9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342 10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog 12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are NUnit, csUnit, Pex, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Nunit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''PEX'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take adavntage of the .NET languages.   It is a free open source unit testing tool for all the test-driven development .NET languages including C#.||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run individual test cases. It has been inspired from JUnit and can be used as an add-in along with the NUnit&lt;br /&gt;
&lt;br /&gt;
||It is a tool to generate efficient unit tests with a high code coverage and are converted to C# automatically. It determines the relevant test inputs for the code hunting for boundary conditions, exceptions and assertion failures. &lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||http://research.microsoft.com/en-us/um/redmond/projects/pex/wiki/The%20Hello%20World%20of%20Pex.html&lt;br /&gt;
|-&lt;br /&gt;
| Used as ||Testing framework, GUI and console tool||Testing Framework ,Console tool and VS.NET Add In||It supports NUnit, MbUnit and xUnit.net.Extensions for these test frameworks can be downloaded from the Pex Extensions Project.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21878</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21878"/>
		<updated>2009-09-25T14:42:21Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial 9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342 10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog 12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are csUnit, NUnit, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written&lt;br /&gt;
completely to take the advantage of the .NET languages.||It is a free open&lt;br /&gt;
source unit testing tool for all the test-driven development .NET languages&lt;br /&gt;
including C#. ||Systin creates a domain specific testing language which&lt;br /&gt;
allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides&lt;br /&gt;
a concise method to express a set of examples that can used to run&lt;br /&gt;
 individual test cases.||It has been inspired from JUnit and can be used as&lt;br /&gt;
an add-in along with the NUnit||The tests can be written in a simple&lt;br /&gt;
document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||&lt;br /&gt;
http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework ,&lt;br /&gt;
Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21877</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21877"/>
		<updated>2009-09-25T14:40:49Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial.html9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog.html12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are csUnit, NUnit, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written&lt;br /&gt;
completely to take the advantage of the .NET languages.||It is a free open&lt;br /&gt;
source unit testing tool for all the test-driven development .NET languages&lt;br /&gt;
including C#. ||Systin creates a domain specific testing language which&lt;br /&gt;
allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides&lt;br /&gt;
a concise method to express a set of examples that can used to run&lt;br /&gt;
 individual test cases.||It has been inspired from JUnit and can be used as&lt;br /&gt;
an add-in along with the NUnit||The tests can be written in a simple&lt;br /&gt;
document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||&lt;br /&gt;
http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework ,&lt;br /&gt;
Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21876</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21876"/>
		<updated>2009-09-25T14:38:59Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial 9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are csUnit, NUnit, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written&lt;br /&gt;
completely to take the advantage of the .NET languages.||It is a free open&lt;br /&gt;
source unit testing tool for all the test-driven development .NET languages&lt;br /&gt;
including C#. ||Systin creates a domain specific testing language which&lt;br /&gt;
allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides&lt;br /&gt;
a concise method to express a set of examples that can used to run&lt;br /&gt;
 individual test cases.||It has been inspired from JUnit and can be used as&lt;br /&gt;
an add-in along with the NUnit||The tests can be written in a simple&lt;br /&gt;
document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||&lt;br /&gt;
http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework ,&lt;br /&gt;
Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21875</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b&amp;diff=21875"/>
		<updated>2009-09-25T14:37:13Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented&lt;br /&gt;
languages. This page talks about the major testing frameworks available for&lt;br /&gt;
the major object oriented languages such as Java, C++, C#,Python, Ruby and&lt;br /&gt;
C#. Comparisons have been made wherever possible between the major&lt;br /&gt;
frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto&lt;br /&gt;
standard for unit testing. However, other frameworks such as TestNG, JTIGER&lt;br /&gt;
have been built to address various faults and deficiencies with JUnit.  Our&lt;br /&gt;
primary objective is to compare the various testing frameworks that exist&lt;br /&gt;
for object oriented languages based on the primary purpose of the framework,&lt;br /&gt;
features, the platforms on which they operate, etc and thus help in picking&lt;br /&gt;
up the best testing framework that fits in a particular suitable&lt;br /&gt;
environment.&lt;br /&gt;
This article DOES NOT introduce JUnit or XUnit. For information on JUnit,&lt;br /&gt;
please refer to: '''APPENDIX'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of&lt;br /&gt;
testing such as unit testing, integration testing, functional testing,&lt;br /&gt;
end-to -end testing. (For definition and more information on the different&lt;br /&gt;
kinds of testing, refer to''' APPENDIX''' given below.)&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in&lt;br /&gt;
them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we&lt;br /&gt;
wish to run, etc) in a testing.xml file or in build.xml.&lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology&lt;br /&gt;
used in Test automation where test scripts are executed and verified based&lt;br /&gt;
on the data values stored in one or more central data sources or databases.&lt;br /&gt;
For a detailed description on data driven testing click here:&lt;br /&gt;
http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways:&lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods&lt;br /&gt;
that belong to these groups and specify groups that contain other groups. It&lt;br /&gt;
is very flexible as it can help in choosing one set of regular expression&lt;br /&gt;
and excluding the other sets. This splits the various test groups and there&lt;br /&gt;
is no need to recompile again if we want to run two different tests back to&lt;br /&gt;
back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA,&lt;br /&gt;
MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities&lt;br /&gt;
such as Flexible test configuration, support for data driven testing, etc.[[&lt;br /&gt;
http://testng.org/doc/documentation-main.html 1]]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as&lt;br /&gt;
Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are&lt;br /&gt;
executed inside the container.&lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the&lt;br /&gt;
following components:&lt;br /&gt;
&lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests.&lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that&lt;br /&gt;
provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use&lt;br /&gt;
a few Integration Modules. [[http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing.&lt;br /&gt;
 The tests written for this framework will exercise the interactions with&lt;br /&gt;
the container. Cactus also provides other frameworks such as code logic unit&lt;br /&gt;
testing, functional unit testing.&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit only integration unit testing with the idea that&lt;br /&gt;
it is much easier to have to write tests for a single framework than for&lt;br /&gt;
several. It is believed that Cactus provides a middle ground that provides a&lt;br /&gt;
high confidence that your code will run when deployed .[[&lt;br /&gt;
http://jakarta.apache.org/cactus/index.html 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [[&lt;br /&gt;
http://junit.sourceforge.net/doc/cookbook/cookbook.htm 3]] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit&lt;br /&gt;
testing,Functional testing, end-to-end testing, integration testing&lt;br /&gt;
||Primarily unit testing. Also have frameworks for code logic unit testing ,&lt;br /&gt;
functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from&lt;br /&gt;
Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites,&lt;br /&gt;
||Flexible for running large test suites of code  and thus one test\'s&lt;br /&gt;
failure shouldn\'t mean having to rerun a suite of thousands. || No, it is&lt;br /&gt;
suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level&lt;br /&gt;
testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE,&lt;br /&gt;
IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an&lt;br /&gt;
effective unit-testing framework, meaning that it was built to facilitate&lt;br /&gt;
testing single objects. TestNG, on the other hand, was built to address&lt;br /&gt;
testing at higher levels, and consequently, has some features not available&lt;br /&gt;
in JUnit&lt;br /&gt;
&lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to&lt;br /&gt;
define a test as a method whose name starts with test, and we can now run&lt;br /&gt;
fixtures just once as opposed to for each test.  However TestNG established&lt;br /&gt;
itself as an annotations-based framework long before Junit 4. TestNG&lt;br /&gt;
pioneered testing with annotations in Java programming, which made it a&lt;br /&gt;
formidable alternative to JUnit. [[&lt;br /&gt;
http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies()&lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss =&lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] {&lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps =&lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are&lt;br /&gt;
more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass (See '''APPENDIX''' for more&lt;br /&gt;
information)  method as static, which consequently requires us to also&lt;br /&gt;
declare the fixture, finder, as static. We also have to declare the init()&lt;br /&gt;
method as public. Looking at the TestNG code, you can find that such&lt;br /&gt;
conventions aren't required. Its init() method is neither static nor&lt;br /&gt;
public.&lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the&lt;br /&gt;
start. JUnit works well for a unit of code, whereas TestNG is better suited&lt;br /&gt;
for high-level testing. Its flexibility is especially useful with large test&lt;br /&gt;
suites.[[http://www.ibm.com/developerworks/java/library/j-cq08296 4]]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units [[&lt;br /&gt;
http://www.opensourcetesting.org/unit_java.php 5]]  ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java&lt;br /&gt;
2 Micro Edition (J2ME) library containing a unit testing framework for&lt;br /&gt;
J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets,&lt;br /&gt;
hierarchically structured XML, and topologically sorted SQL-DML.||A&lt;br /&gt;
lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit.&lt;br /&gt;
However for C++, there is no one clear winner.  CppUnit is the most widely&lt;br /&gt;
used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle6]]&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major&lt;br /&gt;
downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great&lt;br /&gt;
support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly&lt;br /&gt;
output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus&lt;br /&gt;
needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit&lt;br /&gt;
based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the&lt;br /&gt;
power of an external scripting language. It provides some nifty advanced&lt;br /&gt;
features and great assert functionality. It does require the use of a&lt;br /&gt;
scripting language as part of the build process, so those uncomfortable with&lt;br /&gt;
that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not&lt;br /&gt;
required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework&lt;br /&gt;
 The major drawbacks are the relative verbosity for adding new tests and&lt;br /&gt;
fixtures. [[&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle 6]]&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write&lt;br /&gt;
a narrative in a document which can directly be executed as a test. It is&lt;br /&gt;
included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the&lt;br /&gt;
simplicity of a narrative test like doctest is accompanied by it’s own flaws&lt;br /&gt;
.Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
• These tests are difficult to handle in case of failures as they are more&lt;br /&gt;
generic. Specific tests are narrower and better in communicating intent and&lt;br /&gt;
ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
• The test code is executed in a special way thus making it difficult to&lt;br /&gt;
reason about how it will be executed. It is also harder to program around&lt;br /&gt;
the tests.&lt;br /&gt;
&lt;br /&gt;
• It is actually difficult to get an outline of the tests at glance. There’s&lt;br /&gt;
no tool that can give an overview of the unit tests in a doc test file [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Doctest 7]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional&lt;br /&gt;
in nature allowing it to be written for individual functions or the class as&lt;br /&gt;
a whole.&lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit&lt;br /&gt;
familiarity pick it up really quick hence it is more Java based than python&lt;br /&gt;
.It has been introduced in the Python’s library since version 2.1&lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are&lt;br /&gt;
&lt;br /&gt;
• The tests have a different look and feel with respect to the code under&lt;br /&gt;
test&lt;br /&gt;
&lt;br /&gt;
• The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
• The test code is difficult to understand compared to the Doctest and the&lt;br /&gt;
strong basis on jUnit makes it difficult for the pure Python coders [[&lt;br /&gt;
http://en.wikipedia.org/wiki/Unit_testing 8]]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at&lt;br /&gt;
http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of&lt;br /&gt;
which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to&lt;br /&gt;
use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests&lt;br /&gt;
and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks&lt;br /&gt;
which have evolved over the years which include RSpec, Trantula, Flog,&lt;br /&gt;
RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[[http://www.elctech.com/tutorials/rspec-tutorial 9]]'''||It is&lt;br /&gt;
Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just&lt;br /&gt;
writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a&lt;br /&gt;
non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and&lt;br /&gt;
stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec&lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which&lt;br /&gt;
makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[[&lt;br /&gt;
http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html10]]'''||Cucumber,&lt;br /&gt;
the latest addition to the Rspec family allows one to&lt;br /&gt;
execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at&lt;br /&gt;
http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[[http://www.ruby-forum.com/topic/144083 11]]'''||Tarantula is&lt;br /&gt;
a Rail’s plugin that produces a detailed report describing the URL’s that it&lt;br /&gt;
has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing,&lt;br /&gt;
particularly if you are practicing test-driven development (TDD). Tarantula&lt;br /&gt;
runs against your actual Web site thereby helping you to identify the&lt;br /&gt;
problems associated with your production server, user-generated data, and&lt;br /&gt;
HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at&lt;br /&gt;
http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[[&lt;br /&gt;
http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog12]]'''||Flog&lt;br /&gt;
is a tool which gives you a profile of your code’s complexity.&lt;br /&gt;
It can given the complexity pertaining to each method in your code. One can&lt;br /&gt;
also set threshold for each method using flog&lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code&lt;br /&gt;
areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here&lt;br /&gt;
http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list&lt;br /&gt;
of testing frameworks are available for C# which are csUnit, NUnit, dotunit,&lt;br /&gt;
VSNUnit, Nester[[http://csharp-source.net/open-source/testing-tools 13]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written&lt;br /&gt;
completely to take the advantage of the .NET languages.||It is a free open&lt;br /&gt;
source unit testing tool for all the test-driven development .NET languages&lt;br /&gt;
including C#. ||Systin creates a domain specific testing language which&lt;br /&gt;
allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides&lt;br /&gt;
a concise method to express a set of examples that can used to run&lt;br /&gt;
 individual test cases.||It has been inspired from JUnit and can be used as&lt;br /&gt;
an add-in along with the NUnit||The tests can be written in a simple&lt;br /&gt;
document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||&lt;br /&gt;
http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework ,&lt;br /&gt;
Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=APPENDIX=&lt;br /&gt;
&lt;br /&gt;
'''JUnit''' - JUnit is a unit testing framework for the Java programming&lt;br /&gt;
language. JUnit has been important in the development of test-driven&lt;br /&gt;
development, and comprises a family of unit testing frameworks collectively&lt;br /&gt;
known as xUnit that originated with SUnit. (For more information refer to&lt;br /&gt;
http://www.junit.org,http://en.wikipedia.org/wiki/Junit)&lt;br /&gt;
&lt;br /&gt;
'''XUnit''' - Various code-driven testing frameworks have come to be known&lt;br /&gt;
collectively as xUnit. These frameworks allow testing of different elements&lt;br /&gt;
(units) of software, such as functions and classes. (For more information&lt;br /&gt;
refer to http://en.wikipedia.org/wiki/XUnit)&lt;br /&gt;
&lt;br /&gt;
'''unit testing''' - unit testing is a software verification and validation&lt;br /&gt;
method in which a programmer tests if individual units of source code are&lt;br /&gt;
fit for use, where a unit is the smallest testable part of an application.&lt;br /&gt;
For more information refer http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
'''integration testing''' - is the activity of software testing in which&lt;br /&gt;
individual software modules are combined and tested as a group. It occurs&lt;br /&gt;
after unit testing. For more information refer&lt;br /&gt;
http://en.wikipedia.org/wiki/Integration_testing&lt;br /&gt;
&lt;br /&gt;
'''BeforeClass''' - Refer to&lt;br /&gt;
http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21563</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21563"/>
		<updated>2009-09-22T01:16:05Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented languages. This page talks about the major testing frameworks available for the major object oriented languages such as Java, C++, C#,Python, Ruby and C#. Comparisons have been made wherever possible between the major frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto standard for unit testing. However, other frameworks such as TestNG, JTIGER have been built to address various faults and deficiencies with JUnit.  Our primary objective is to compare the various testing frameworks that exist for object oriented languages based on the primary purpose of the framework, features, the platforms on which they operate, etc and thus help in picking up the best testing framework that fits in a particular suitable environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of testing such as unit testing, integration testing, functional testing, end-to -end testing.&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we wish to run, etc) in a testing.xml file or in build.xml. &lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology used in Test automation where test scripts are executed and verified based on the data values stored in one or more central data sources or databases. For a detailed description on data driven testing click here: http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways: &lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods that belong to these groups and specify groups that contain other groups. It is very flexible as it can help in choosing one set of regular expression and excluding the other sets. This splits the various test groups and there is no need to recompile again if we want to run two different tests back to back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA, MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities such as Flexible test configuration, support for data driven testing, etc.[1]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are executed inside the container. &lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the following components:&lt;br /&gt;
 &lt;br /&gt;
--Cactus Framework:  This provides the API to write Cactus tests. &lt;br /&gt;
&lt;br /&gt;
--Cactus Integration Modules: They are front ends and frameworks that provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
--Cactus Samples: They demonstrate how to write Cactus tests and how to use a few Integration Modules. [2]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing( type 2).  The tests written for this framework will exercise the interactions with the container. Cactus also provides other frameworks such as code logic unit testing (type 1) ,functional unit testing( type 3).&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit Type 2 but also to be a very good compromise for types 1 and 3, with the idea that it is much easier to have to write tests for a single framework than for several. It is believed that Cactus provides a middle ground that provides a high confidence that your code will run when deployed .[2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [3] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit testing,Functional testing, end-to-end testing, integration testing ||Primarily unit testing. Also have frameworks for code logic unit testing , functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Init () ||Init() has to be declared static||Not necessary||&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites, ||Flexible for running large test suites of code  and thus one test\'s failure shouldn\'t mean having to rerun a suite of thousands. || No, it is suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE, IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an effective unit-testing framework, meaning that it was built to facilitate testing single objects. TestNG, on the other hand, was built to address testing at higher levels, and consequently, has some features not available in JUnit&lt;br /&gt;
 &lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to define a test as a method whose name starts with test, and we can now run fixtures just once as opposed to for each test.  However TestNG established itself as an annotations-based framework long before Junit 4. TestNG pioneered testing with annotations in Java programming, which made it a formidable alternative to JUnit. [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies() &lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss = &lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] { &lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps = &lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);   &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies() &lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss = &lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] { &lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps = &lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);           &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass  method as static, which consequently requires us to also declare the fixture, finder, as static. We also have to declare the init() method as public. Looking at the TestNG code, you can find that such conventions aren't required. Its init() method is neither static nor public. &lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the start. JUnit works well for a unit of code, whereas TestNG is better suited for high-level testing. Its flexibility is especially useful with large test suites.[4]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units  ==&lt;br /&gt;
[5]&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java 2 Micro Edition (J2ME) library containing a unit testing framework for J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets, hierarchically structured XML, and topologically sorted SQL-DML.||A lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit. However for C++, there is no one clear winner.  CppUnit is the most widely used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [6] :&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the power of an external scripting language. It provides some nifty advanced features and great assert functionality. It does require the use of a scripting language as part of the build process, so those uncomfortable with that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework  The major drawbacks are the relative verbosity for adding new tests and fixtures.&lt;br /&gt;
&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [7].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [8]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[9]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[10]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[11]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[12]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[13].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]  http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21560</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21560"/>
		<updated>2009-09-22T01:14:19Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUnit in general, is only one kind of testing framework for object oriented languages. This page talks about the major testing frameworks available for the major object oriented languages such as Java, C++, C#,Python, Ruby and C#. Comparisons have been made wherever possible between the major frameworks available in each language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of testing framework exist for Java. JUnit has been the de facto standard for unit testing. However, other frameworks such as TestNG, JTIGER have been built to address various faults and deficiencies with JUnit.  Our primary objective is to compare the various testing frameworks that exist for object oriented languages based on the primary purpose of the framework, features, the platforms on which they operate, etc and thus help in picking up the best testing framework that fits in a particular suitable environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of testing such as unit testing, integration testing, functional testing, end-to -end testing.&lt;br /&gt;
&lt;br /&gt;
To write a TestNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in them.&lt;br /&gt;
Add the information about our test (such as the class name, the groups we wish to run, etc) in a testing.xml file or in build.xml. &lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing.(Data-driven testing is a methodology used in Test automation where test scripts are executed and verified based on the data values stored in one or more central data sources or databases. For a detailed description on data driven testing click here: http://en.wikipedia.org/wiki/Data-driven_testing  )&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways: &lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods that belong to these groups and specify groups that contain other groups. It is very flexible as it can help in choosing one set of regular expression and excluding the other sets. This splits the various test groups and there is no need to recompile again if we want to run two different tests back to back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA, MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities such as Flexible test configuration, support for data driven testing, etc.[1]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are executed inside the container. &lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the following components:&lt;br /&gt;
 &lt;br /&gt;
Cactus Framework:  This provides the API to write Cactus tests. &lt;br /&gt;
&lt;br /&gt;
Cactus Integration Modules: They are front ends and frameworks that provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
&lt;br /&gt;
Cactus Samples: They demonstrate how to write Cactus tests and how to use a few Integration Modules. [2]&lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing( type 2).  The tests written for this framework will exercise the interactions with the container. Cactus also provides other frameworks such as code logic unit testing (type 1) ,functional unit testing( type 3).&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit Type 2 but also to be a very good compromise for types 1 and 3, with the idea that it is much easier to have to write tests for a single framework than for several. It is believed that Cactus provides a middle ground that provides a high confidence that your code will run when deployed .[2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
== '''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [3] ==&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit testing,Functional testing, end-to-end testing, integration testing ||Primarily unit testing. Also have frameworks for code logic unit testing , functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid  ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Init () ||Init() has to be declared static||Not necessary||&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites, ||Flexible for running large test suites of code  and thus one test\'s failure shouldn\'t mean having to rerun a suite of thousands. || No, it is suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Works with||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE, IDEA,MAVEN||ANT&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an effective unit-testing framework, meaning that it was built to facilitate testing single objects. TestNG, on the other hand, was built to address testing at higher levels, and consequently, has some features not available in JUnit&lt;br /&gt;
 &lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to define a test as a method whose name starts with test, and we can now run fixtures just once as opposed to for each test.  However TestNG established itself as an annotations-based framework long before Junit 4. TestNG pioneered testing with annotations in Java programming, which made it a formidable alternative to JUnit. [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies() &lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss = &lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] { &lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps = &lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);   &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies() &lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss = &lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] { &lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps = &lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);           &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass  method as static, which consequently requires us to also declare the fixture, finder, as static. We also have to declare the init() method as public. Looking at the TestNG code, you can find that such conventions aren't required. Its init() method is neither static nor public. &lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the start. JUnit works well for a unit of code, whereas TestNG is better suited for high-level testing. Its flexibility is especially useful with large test suites.[4]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units  ==&lt;br /&gt;
[5]&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java 2 Micro Edition (J2ME) library containing a unit testing framework for J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets, hierarchically structured XML, and topologically sorted SQL-DML.||A lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit. However for C++, there is no one clear winner.  CppUnit is the most widely used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [6] :&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the power of an external scripting language. It provides some nifty advanced features and great assert functionality. It does require the use of a scripting language as part of the build process, so those uncomfortable with that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework  The major drawbacks are the relative verbosity for adding new tests and fixtures.&lt;br /&gt;
&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [7].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [8]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[9]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[10]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[11]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
&lt;br /&gt;
A well explained example can be seen at http://www.railslodge.com/plugins/959-tarantula&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[12]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[13].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]  http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21381</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21381"/>
		<updated>2009-09-21T21:27:30Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Java Testing Frameworks =&lt;br /&gt;
&lt;br /&gt;
Plenty of Testing framework exist for Java. JUnit has been the de facto standard for unit testing. However, other frameworks such as TestNG, JTIGER have been built to address various faults and deficiencies with JUnit.  Our primary objective is to compare the various testing frameworks that exist for object oriented languages based on the primary purpose of the framework, strength, platforms that are supported by them, etc and thus help in choosing the best testing framework that fits in a particular suitable environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TestNG Framework ==&lt;br /&gt;
&lt;br /&gt;
TestNG is a testing framework which can help to meet a broad range of testing such as unit testing, integration testing, functional testing, end-to -end testing.&lt;br /&gt;
&lt;br /&gt;
To write a TESTNG test, we need to:&lt;br /&gt;
Write the business logic of the test, and insert the TestNG annotations in them.&lt;br /&gt;
Add the information about our test (such as: the class name, the groups we wish to run, etc) in a testing.xml file or in build.xml. &lt;br /&gt;
Run the test.&lt;br /&gt;
TestNG supports data driven testing&lt;br /&gt;
&lt;br /&gt;
TestNG is invoked in several different ways: &lt;br /&gt;
With a testing.xml file&lt;br /&gt;
ANT&lt;br /&gt;
Command line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to group the test methods of TestNG.  We can declare methods that belong to these groups and specify groups that contain other groups. It is very flexible as it can help in choosing one set of regular expression and excluding the other sets. This splits the various test groups and there is no need to recompile again if we want to run two different tests back to back.&lt;br /&gt;
&lt;br /&gt;
Requirements:&lt;br /&gt;
JDK 1.4, 1.5&lt;br /&gt;
Invoked in many environments such as command line, ant, ECLIPSE, IDEA, MAVEN, etc&lt;br /&gt;
&lt;br /&gt;
The annotations available in TestNG can be found at:&lt;br /&gt;
http://testng.org/doc/documentation-main.html#annotations&lt;br /&gt;
&lt;br /&gt;
TestNG is inspired from JUnit and Nunit, with additional functionalities such as Flexible test configuration, support for data driven testing, etc.[1]&lt;br /&gt;
&lt;br /&gt;
== Cactus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cactus is a test framework for testing server-side java code such as Servlets, EJB, etc. It extends J Unit.&lt;br /&gt;
Cactus implements an in-container strategy which means that tests are executed inside the container. &lt;br /&gt;
The Cactus testing unit can be viewed as a system that consists of the following components: &lt;br /&gt;
Cactus Framework:  This provides the API to write Cactus tests. &lt;br /&gt;
Cactus Integration Modules: They are front ends and frameworks that provide easy ways of using the Cactus Framework. Eg: Eclipse plugin&lt;br /&gt;
Cactus Samples: They demonstrate how to write Cactus tests and how to use a few Integration Modules. &lt;br /&gt;
&lt;br /&gt;
A useful testing framework provided by Cactus is  integration unit testing( type 2).  The tests written for this framework will exercise the interactions with the container. Cactus also provides other frameworks such as code logic unit testing (type 1) ,functional unit testing( type 3).&lt;br /&gt;
&lt;br /&gt;
Cactus was developed to fit Type 2 but also to be a very good compromise for types 1 and 3, with the idea that it is much easier to have to write tests for a single framework than for several. It is believed that Cactus provides a middle ground that provides a high confidence that your code will run when deployed .[2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To know how it works, click here :&lt;br /&gt;
http://jakarta.apache.org/cactus/how_it_works.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''COMPARISON BETWEEN JUnit,TestNG and Cactus frameworks''' [3]&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JUnit4'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''TestNG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Cactus'''&lt;br /&gt;
|-&lt;br /&gt;
| Supporting Type of Testing||Suitable more for Unit testing||Supports Unit testing,Functional testing, end-to-end testing, integration testing ||Primarily unit testing. Also have frameworks for code logic unit testing , functional logic unit testing&lt;br /&gt;
|-&lt;br /&gt;
| Conventions||Rigid Example: ||Flexible||Not as flexible as TestNG&lt;br /&gt;
|-&lt;br /&gt;
| Derived from JUnit||Yes, from the previous versions||Inspired from Junit,with  added functionalities ||Extends JUnit&lt;br /&gt;
|-&lt;br /&gt;
| Init () ||Init() has to be declared static||Not necessary||&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility for large suites||Not flexible for large test suites, ||Flexible for running large test suites of code  and thus one test\'s failure shouldn\'t mean having to rerun a suite of thousands. || No, it is suitable for unit testing.&lt;br /&gt;
|-&lt;br /&gt;
| Suitable for ||Best for a single object||Best for a higher level testing||Best for server-side java code such as Servlets, EJB, etc.&lt;br /&gt;
|-&lt;br /&gt;
| Runs on||Command line, ANT,ECLIPSE||Command line,ANT, ECLIPSE, IDEA,MAVEN||ECLIPSE&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== An example comparing JUNIT 4 and TestNG ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JUnit 4  v/s TestNG'''&lt;br /&gt;
&lt;br /&gt;
(source: http://www.ibm.com/developerworks/java/library/j-cq08296/) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frameworks differ is in their core design. JUnit has always been an effective unit-testing framework, meaning that it was built to facilitate testing single objects. TestNG, on the other hand, was built to address testing at higher levels, and consequently, has some features not available in JUnit&lt;br /&gt;
 &lt;br /&gt;
JUnit 4 makes clever use of annotations. JUnit no longer requires you to define a test as a method whose name starts with test, and we can now run fixtures just once as opposed to for each test.  However TestNG established itself as an annotations-based framework long before Junit 4. TestNG pioneered testing with annotations in Java programming, which made it a formidable alternative to JUnit. [4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample J Unit 4 code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.junit.Assert.assertEquals;&lt;br /&gt;
 import static org.junit.Assert.assertNotNull;&lt;br /&gt;
 import org.junit.BeforeClass;&lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private static DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 public static void init() throws Exception {&lt;br /&gt;
  finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies() &lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss = &lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
 Filter[] filtr = new Filter[] { &lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
 Dependency[] deps = &lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
 assertNotNull(&amp;quot;deps was null&amp;quot;, deps);&lt;br /&gt;
   assertEquals(&amp;quot;should be 5 large&amp;quot;, 5, deps.length);   &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample TestNG code&lt;br /&gt;
&lt;br /&gt;
 package test.com.acme.dona.dep;&lt;br /&gt;
 import static org.testng.Assert.assertEquals;&lt;br /&gt;
 import static org.testng.Assert.assertNotNull;&lt;br /&gt;
 import org.testng.annotations.BeforeClass;&lt;br /&gt;
 import org.testng.annotations.Configuration;&lt;br /&gt;
 import org.testng.annotations.Test;&lt;br /&gt;
 public class DependencyFinderTest {&lt;br /&gt;
 private DependencyFinder finder;&lt;br /&gt;
 @BeforeClass&lt;br /&gt;
 private void init(){&lt;br /&gt;
  this.finder = new DependencyFinder();&lt;br /&gt;
 }&lt;br /&gt;
 @Test&lt;br /&gt;
 public void verifyDependencies() &lt;br /&gt;
  throws Exception {&lt;br /&gt;
   String targetClss = &lt;br /&gt;
     &amp;quot;test.com.acme.dona.dep.DependencyFind&amp;quot;;&lt;br /&gt;
   Filter[] filtr = new Filter[] { &lt;br /&gt;
      new RegexPackageFilter(&amp;quot;java|junit|org&amp;quot;)};&lt;br /&gt;
   Dependency[] deps = &lt;br /&gt;
      finder.findDependencies(targetClss, filtr);&lt;br /&gt;
   assertNotNull(deps, &amp;quot;deps was null&amp;quot; );&lt;br /&gt;
   assertEquals(5, deps.length, &amp;quot;should be 5 large&amp;quot;);           &lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 (source: http://www.ibm.com/developerworks/java/library/j-cq08296/)&lt;br /&gt;
&lt;br /&gt;
Both the codes may look a lot similar. However TestNG coding conventions are more flexible than JUnit 4.&lt;br /&gt;
&lt;br /&gt;
JUnit forces us to declare the @BeforeClass  method as static, which consequently requires us to also declare the fixture, finder, as static. We also have to declare the init() method as public. Looking at the TestNG code, you can find that such conventions aren't required. Its init() method is neither static nor public. &lt;br /&gt;
Flexibility has been one of the strong points of TestNG right from the start. JUnit works well for a unit of code, whereas TestNG is better suited for high-level testing. Its flexibility is especially useful with large test suites.[4]&lt;br /&gt;
&lt;br /&gt;
== Some other JAVA testing units  ==&lt;br /&gt;
[5]&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''JEasyTest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''J2ME Unit Testing Toolkit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Jailer'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Mockrunner'''&lt;br /&gt;
|-&lt;br /&gt;
| Features||Generates coverage report Allows virtual mock object||Is a  Java 2 Micro Edition (J2ME) library containing a unit testing framework for J2ME||Does test data exporting.  JDBC agnostic  Generates DbUnit datasets, hierarchically structured XML, and topologically sorted SQL-DML.||A lightweight framework for unit testing applications in the J2EE environment.&lt;br /&gt;
|-&lt;br /&gt;
| Integrates with:||ECLIPSE 3.3||ANT ||Platform Independent||OS independent&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing frameworks for C++   =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When it comes to unit testing in Java, a unanimous choice would be JUnit. However for C++, there is no one clear winner.  CppUnit is the most widely used tool for C++ which is a part of the XUnit family.&lt;br /&gt;
&lt;br /&gt;
Following is a few basic factors to judge a good testing unit in C++ [6] :&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Features'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CppUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''BOOST.test'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''CxxUnit'''&lt;br /&gt;
|-&lt;br /&gt;
| Minimal amount of work needed to add new tests ||No, and thus a major downfall.||Yes||Yes, very good.&lt;br /&gt;
|-&lt;br /&gt;
| Easy to modify and port ||Medium||Medium||Simplest&lt;br /&gt;
|-&lt;br /&gt;
| Supports setup/teardown steps ||Yes||||Best&lt;br /&gt;
|-&lt;br /&gt;
| Handles exceptions and crashes well.||Yes||Yes, above others||Great support.&lt;br /&gt;
|-&lt;br /&gt;
| Good assert functionality.||Pretty decent.||Yes||Best&lt;br /&gt;
|-&lt;br /&gt;
| Supports different outputs. ||Yes. Comes with IDE friendly output.||Probably, Not trivial to change.||Yes&lt;br /&gt;
|-&lt;br /&gt;
| Supports  suites||Yes.||Yes, but with a big catch. ||Yes&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CppUnit passes most of the above tests , except for the first point and thus needs a lot of code typing.&lt;br /&gt;
Boost.Test isn’t exclusively a unit-testing framework, and is not X Unit based.&lt;br /&gt;
&lt;br /&gt;
Out of the above three , cxxUnit turns out to be a favourite.&lt;br /&gt;
&lt;br /&gt;
It comes close to the requirements of an ideal framework by leveraging the power of an external scripting language. It provides some nifty advanced features and great assert functionality. It does require the use of a scripting language as part of the build process, so those uncomfortable with that requirement, might want to look at one of the other two frameworks.&lt;br /&gt;
&lt;br /&gt;
For work restricted to the PC,  where modifying the framework is not required Boost.Test could  be a very good choice.&lt;br /&gt;
CppUnit , which has come a long way in years is a solid, complete framework  The major drawbacks are the relative verbosity for adding new tests and fixtures.&lt;br /&gt;
&lt;br /&gt;
http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [7].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [8]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ruby =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[9]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[10]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[11]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[12]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= C# =&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[13].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1]  http://testng.org/doc/documentation-main.html&lt;br /&gt;
&lt;br /&gt;
[2]  http://jakarta.apache.org/cactus/index.html&lt;br /&gt;
&lt;br /&gt;
[3]  http://junit.sourceforge.net/doc/cookbook/cookbook.htm&lt;br /&gt;
&lt;br /&gt;
[4]  http://www.ibm.com/developerworks/java/library/j-cq08296&lt;br /&gt;
&lt;br /&gt;
[5]  http://www.opensourcetesting.org/unit_java.php&lt;br /&gt;
&lt;br /&gt;
[6]  http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle&lt;br /&gt;
&lt;br /&gt;
[7] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[8] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[9] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[10] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[11] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[12] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[13] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21344</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21344"/>
		<updated>2009-09-21T20:51:40Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.c2.com/cgi/wiki?TestingFramework&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[3] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[4] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[5] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[7] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[8] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21341</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21341"/>
		<updated>2009-09-21T20:50:58Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* C# */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.c2.com/cgi/wiki?TestingFramework&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[3] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[4] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[5] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[7] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[8] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21306</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21306"/>
		<updated>2009-09-21T20:19:44Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.c2.com/cgi/wiki?TestingFramework&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[3] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[4] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[5] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[7] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[8] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21304</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21304"/>
		<updated>2009-09-21T20:19:05Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [[2]].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.c2.com/cgi/wiki?TestingFramework&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[3] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[4] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[5] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[7] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[8] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21303</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21303"/>
		<updated>2009-09-21T20:18:29Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.c2.com/cgi/wiki?TestingFramework&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
&lt;br /&gt;
[3] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
&lt;br /&gt;
[4] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
&lt;br /&gt;
[5] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
&lt;br /&gt;
[6] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
&lt;br /&gt;
[7] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
&lt;br /&gt;
[8] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21302</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21302"/>
		<updated>2009-09-21T20:17:59Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.c2.com/cgi/wiki?TestingFramework&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
[3] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
[4] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
[5] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
[6] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
[7] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
[8] http://csharp-source.net/open-source/testing-tools&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21301</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21301"/>
		<updated>2009-09-21T20:16:13Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== C# ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The list of frameworks that apply for .NET are applied for C#. A long list of testing frameworks are available for C# which are csUnit, NUnit, dotunit, VSNUnit, Nester[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''NUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''csUnit'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Systin'''&lt;br /&gt;
|-&lt;br /&gt;
| Description||NUnit has been ported from JUnit and has been written completely to take the advantage of the .NET languages.||It is a free open source unit testing tool for all the test-driven development .NET languages including C#. ||Systin creates a domain specific testing language which allows an automatic testing of applications at the system level.&lt;br /&gt;
|-&lt;br /&gt;
| ||The major advancements with NUnit are parameterized tests which provides a concise method to express a set of examples that can used to run  individual test cases.||It has been inspired from JUnit and can be used as an add-in along with the NUnit||The tests can be written in a simple document which can be converted to a .net language driver class&lt;br /&gt;
|-&lt;br /&gt;
| Examples||http://www.nunit.org/blogs/||http://www.csunit.org/tutorials/tutorial7/||&lt;br /&gt;
|-&lt;br /&gt;
| ||||||&lt;br /&gt;
|-&lt;br /&gt;
| Used as||Testing framework, GUI and console tool||Testing Framework , Console tool and VS.NET Add In||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.c2.com/cgi/wiki?TestingFramework&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Doctest&lt;br /&gt;
[3] http://en.wikipedia.org/wiki/Unit_testing&lt;br /&gt;
[4] http://www.elctech.com/tutorials/rspec-tutorial&lt;br /&gt;
[5] http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html&lt;br /&gt;
[6] http://www.ruby-forum.com/topic/144083&lt;br /&gt;
[7] http://www.brynary.com/2007/9/13/scourging-your-ruby-code-with-flog&lt;br /&gt;
[8] http://csharp-source.net/open-source/testing-tools&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21300</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21300"/>
		<updated>2009-09-21T20:12:21Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21299</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21299"/>
		<updated>2009-09-21T20:11:54Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ruby ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21298</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21298"/>
		<updated>2009-09-21T20:10:53Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ruby&lt;br /&gt;
 ==&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| '''Rspec[4]'''||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| '''Cucumber[5]'''||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| '''Tarantula[6]'''||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| '''Flog[7]'''||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21297</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21297"/>
		<updated>2009-09-21T20:09:26Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ruby&lt;br /&gt;
&lt;br /&gt;
The basic testing framework for RUBY is xUnit . There are some frameworks which have evolved over the years which include RSpec, Trantula, Flog, RunCodeRun, Cucumber etc. We’ll talk about each of them in brief&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| Rspec[4]||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber[5]||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| Tarantula[6]||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| Flog[7]||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21296</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21296"/>
		<updated>2009-09-21T20:07:57Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| Rspec[4]||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| ||Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| ||·         One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| ||Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| ||·         It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| ||A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber[5]||Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’)&lt;br /&gt;
|-&lt;br /&gt;
| ||A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| Tarantula[6]||Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| ||Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| Flog[7]||Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| ||The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| ||·         Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| ||·         Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| ||A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| ||&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21294</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21294"/>
		<updated>2009-09-21T20:04:03Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| '''Simplicity'''||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| '''Documentation'''||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| '''Comprehensive testing'''||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| '''Flexibility and Control'''||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21293</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21293"/>
		<updated>2009-09-21T20:03:27Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Doctest'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''unittest'''&lt;br /&gt;
|-&lt;br /&gt;
| Simplicity||Best suited for novice programmers||A little complex to use specially if unaware of Junit&lt;br /&gt;
|-&lt;br /&gt;
| Documentation||Better Narratives||Tests have little or no comments&lt;br /&gt;
|-&lt;br /&gt;
| Comprehensive testing||Doctests get clutterd for comprehensive tests and thus less readable||Best suited for comprehensive tests&lt;br /&gt;
|-&lt;br /&gt;
| Flexibility and Control||Less flexible||More flexible&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21292</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21292"/>
		<updated>2009-09-21T20:02:19Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| Rspec[4]||It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| • Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| • It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| • It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| • These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| • Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| • Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| • One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| • It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber[5]||\&amp;quot;Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’).&lt;br /&gt;
|-&lt;br /&gt;
| A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Tarantula[6]||\&amp;quot;Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Flog[7]||\&amp;quot;Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| • Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| • Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21291</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21291"/>
		<updated>2009-09-21T20:00:48Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
{| {{table}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Testing Framework'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|''''''&lt;br /&gt;
|-&lt;br /&gt;
| Rspec[4]||\&amp;quot;It is Behavior Driven Development whose basic features are&lt;br /&gt;
|-&lt;br /&gt;
| • Behavior counts first, testing follows&lt;br /&gt;
|-&lt;br /&gt;
| • It focuses more on business values&lt;br /&gt;
|-&lt;br /&gt;
| • It’s more about getting the words right rather than just writing the test first&lt;br /&gt;
|-&lt;br /&gt;
| Advantages:&lt;br /&gt;
|-&lt;br /&gt;
| • These are extremely easy to read and makes sense to a non-programmer&lt;br /&gt;
|-&lt;br /&gt;
| • Rspec lets you unit test while also providing mocking and stubbing support&lt;br /&gt;
|-&lt;br /&gt;
| • Rspec can help with the coverage tests using Rcov&lt;br /&gt;
|-&lt;br /&gt;
| • One can also perform integration test using Rspec &lt;br /&gt;
|-&lt;br /&gt;
| Disadvantages:&lt;br /&gt;
|-&lt;br /&gt;
| • It involves a lot of behind the scene metaprogramming which makes the tests very difficult to understand&lt;br /&gt;
|-&lt;br /&gt;
| A simple Rspec example can be read at http://rspec.info/&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Cucumber[5]||\&amp;quot;Cucumber, the latest addition to the Rspec family allows one to execute documentation written in plain text(known as ‘stories’).&lt;br /&gt;
|-&lt;br /&gt;
| A very good example of writing a test in cucumber can be read at http://cukes.info/&lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Tarantula[6]||\&amp;quot;Tarantula is a Rail’s plugin that produces a detailed report describing the URL’s that it has crawled across and the responses that it received from each one of them.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tarantula\'s functionality somewhat overlaps with the on site testing, particularly if you are practicing test-driven development (TDD). Tarantula runs against your actual Web site thereby helping you to identify the problems associated with your production server, user-generated data, and HTML compliance.&lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Flog[7]||\&amp;quot;Flog is a tool which gives you a profile of your code’s complexity. It can given the complexity pertaining to each method in your code. One can also set threshold for each method using flog &lt;br /&gt;
|-&lt;br /&gt;
| The complexity of a code can be important to &lt;br /&gt;
|-&lt;br /&gt;
| • Find the bugs as they are highly probable in complex code areas&lt;br /&gt;
|-&lt;br /&gt;
| • Complex codes can be considered for refactoring&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| A flog report has been explained and shown here http://www.ruby-forum.com/topic/131931&lt;br /&gt;
|-&lt;br /&gt;
| \&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21289</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21289"/>
		<updated>2009-09-21T20:00:03Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2].&lt;br /&gt;
&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
&lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
&lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
&lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21288</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21288"/>
		<updated>2009-09-21T19:59:16Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest''': It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2]&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Unittest''': Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Doctest vs Unittest'''&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21287</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21287"/>
		<updated>2009-09-21T19:58:16Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Doctest: It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2]&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unittest: Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Doctest vs Unittest&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21285</id>
		<title>Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2010/ch1 S10 MS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2010/ch1_S10_MS&amp;diff=21285"/>
		<updated>2009-09-21T19:57:04Z</updated>

		<summary type="html">&lt;p&gt;Abhatt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Python&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Doctest: It is a simple, ingenuine technology that allows you to write a narrative in a document which can directly be executed as a test. It is included in Python as a module.&lt;br /&gt;
Although doctest makes testing code readable for non-programmers ,the simplicity of a narrative test like doctest is accompanied by it’s own flaws .Some of the disadvantages of using doctest are&lt;br /&gt;
&lt;br /&gt;
•	These tests are difficult to handle in case of failures as they are more generic. Specific tests are narrower and better in communicating intent and ensuring coverage.&lt;br /&gt;
•	The test code is executed in a special way thus making it difficult to reason about how it will be executed. It is also harder to program around the tests.&lt;br /&gt;
•	It is actually difficult to get an outline of the tests at glance. There’s no tool that can give an overview of the unit tests in a doc test file [2]&lt;br /&gt;
An detailed information about doctest with thorough examples can be read at http://docs.python.org/library/doctest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unittest: Unittest are more specific tests which are more functional in nature allowing it to be written for individual functions or the class as a whole. &lt;br /&gt;
The fact that Unittest is based on jUnit makes people with the xUnit familiarity pick it up really quick hence it is more Java based than python .It has been introduced in the Python’s library since version 2.1 &lt;br /&gt;
The disadvantages of using the unit test are &lt;br /&gt;
•	The tests have a different look and feel with respect to the code under test&lt;br /&gt;
•	The assertions used in the text use custom syntax which makes it difficult&lt;br /&gt;
•	The test code is difficult to understand compared to the Doctest and the strong basis on jUnit makes it difficult for the pure Python coders [3]&lt;br /&gt;
A detailed information about doctest with thorough examples can be read at http://docs.python.org/library/unittest.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Doctest vs Unittest&lt;br /&gt;
&lt;br /&gt;
Here we compare simple features of both the tests thus giving us an idea of which one to use based on the requirement&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Abhatt</name></author>
	</entry>
</feed>