Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'web/testing')
-rw-r--r--web/testing237
1 files changed, 232 insertions, 5 deletions
diff --git a/web/testing b/web/testing
index f97902ec306..ab60d7fe4d3 100644
--- a/web/testing
+++ b/web/testing
@@ -1,21 +1,168 @@
* Testing
+ Daily <a href="http://www.go-mono.com/tests/index.php">test</a> results.
+
Testing is an important part of the Mono project: every one of its
three major components has a test suite tailored for its needs. This
is very helpful, because in the course of developing the software it
is very common to introduce bugs in existing code. A test suite
helps us fix the bugs as soon as they are introduced.
-** Class Library Tests
+ There are various kinds of tests in Mono:
+ <ul>
+ <li><a href="#unit"><b>Class Library Unit
+ Tests:</b></a> These are used to test the class
+ libraries.
+
+ <li><a href="#compiler"><b>Compiler tests</b></a>: Both
+ tests that should pass and tests that should fail are included.
+
+ <li><a href="#runtime"><b>Runtime tests</b></a>: Tests for
+ the virtual machine.
+
+ <li><a href="#aspnet"><b>ASP.NET tests</b></a>: ASP.NET tests.
+
+ <li><a href="#ws"><b>Web Services tests</b></a>: Web Services
+ client/server tests.
+ </ul>
+
+<a name="unit"></a>
+* Class Library Tests
All classes in Mono libraries should have comprehensive unit test
- suites to go with them. Unit testing is a software engineering
- methodology that makes it easier to build correct code. Every
+ suites to go with them. Unit testing is a software engineering
+ methodology that makes it easier to build correct code. Every
method in every class should have a set of tests to verify
- that they work correctly. Mono also needs a testing framework
+ that they work correctly. Mono also needs a testing framework
to make it easy to write and run lots of tests.
- Try <a href="http://nunit.sourceforge.net">NUnit</a>
+ In some classes, we might also provide standalone tests because of
+ some reasons such as too huge testcases, another downloading and so on.
+ (For example, managed XSLT has standalone test which downloads and
+ expands some megabytes of OASIS test suite.)
+
+ Here I list them up as long as I know. If you are going to add another
+ standalone tests, please add one line here. It is also recommended that
+ you add some notes on how to build and run tests.
+
+ <ul>
+
+ * Mono.Data/test/
+ * System.Data/Test, and some individual ADO.NET libraries:
+ there are some standalone tests. See the bottom of <a href="ado-net.html">
+ ADO.NET page</a> for detail.
+ * System.Web/Test/TestMonoWeb : see README
+ * System.Web.Services/Test/standalone : see README
+ * System.Windows.Forms/SWFTest/
+ * System.XML/Test/System.Xml/standalone_tests : see README
+ * System.XML/Test/System.Xml.Schema/standalone_tests : see README
+ * System.XML/System.Xml.Serialization/standalone_tests/
+ * System.XML/Test/System.Xml.Xsl/standalone_tests : see README
+ * Commons.Xml.Relaxng/Test/standalone_tests : see README
+
+ </ul>
+
+** Getting started
+
+ If you are new to writing NUnit tests, there is a template you may use
+ to help get started. The file is:
+
+ <b>mcs/class/doc/TemplateTest.cs</b>
+
+ Save a copy of this file in the appropriate test subdirecty
+ (see below), and replace all the {text} markers with
+ appropriate code. Comments in the template are there to guide
+ you. You should also look at existing tests to see how other
+ people have written them.
+ mcs/class/corlib/Test/System.Collections/CollectionBaseTest.cs
+ is a small one that might help.
+
+ The directory that will contain your new file depends on the
+ assembly/namespace of the class for which you are creating the
+ tests. Under mcs/class there is a directory for each
+ assembly. In each assembly there is a Test directory,
+ e.g. mcs/class/corlib/Test. In the Test directory there are
+ sub-directories for each namespace in the assembly,
+ e.g. mcs/class/corlib/Test/Sytem. Put your new test file in
+ the appropriate sub-directory under Test for the class you are
+ testing.
+
+ Once all of that is done, you can do a 'make test' from the top mcs
+ directory. Your test class needs also to be listed in the
+ .sources file at the top of the Test directory.
+
+* Tips on writing Unit tests.
+
+ You should look at the <a href="http://nunit.org">NUnit documentation</a>,
+ as it is a fantastic product, and includes fantastic documentation,
+ but here are some tips for those of you who are already reading
+ this web page.
+
+
+** Provide an unique error message for Assert()
+
+ Include an unique message for each Assert() so that when the assert
+ fails, it is trivial to locate it in the source. Otherwise, it may be
+ difficult to determine which part of the test is failing. A good way
+ to ensure unique messages is to use something like #A01, #A02 etc.
+
+ Ok:
+ <pre>
+
+ AssertEquals("array match", compare[0], i1[0]);
+ AssertEquals("array match", compare[1], i1[1]);
+ AssertEquals("array match", compare[2], i1[2]);
+ AssertEquals("array match", compare[3], i1[3]);
+ </pre>
+
+ Excellent:
+ <pre>
+ AssertEquals("#A01", compare[0], i1[0]);
+ AssertEquals("#A02", compare[1], i1[1]);
+ AssertEquals("#A03", compare[2], i1[2]);
+ AssertEquals("#A04", compare[3], i1[3]);
+ </pre>
+
+ Once you used such a number in an Assert(), don't change it later on -
+ people might use it it identify the test in bug reports or in mailing
+ lists.
+
+** Use AssertEquals() to compare things, not Assert().
+
+ Do not compare two values with Assert() - if the test fails,
+ people have no idea what went wrong while AssertEquals()
+ reports the failed value.
+
+ Ok:
+ <pre>
+ Assert ("A01", myTicks[0] == t1.Ticks);
+ </pre>
+
+ Excellent:
+ <pre>
+ AssertEquals ("A01", myTicks[0], t1.Ticks);
+ </pre>
+
+** Test your test with the Microsoft runtime
+
+ If possible, try to run your testsuite with the Microsoft runtime on
+ .NET on Windows and make sure all tests in it pass. This is especially
+ important if you're writing a totally new testcase - without this
+ check you can never be sure that your testcase contains no bugs ....
+
+ Don't worry if you're writing your test on Linux, other people can
+ test it for you on Windows.
+
+ Sometimes you may discover that a test doesn't show the expected
+ result when run with the Microsoft runtime - either because there is a
+ bug in their runtime or something is misleading or wrong in their
+ documentation. In this case, please put a detailed description of the
+ problem to mcs/class/doc/API-notes and do also report it to the
+ <a href="mailing-lists.html">mailing list</a> - we'll forward this to the
+ Microsoft people from time to time to help them fix their documentation
+ and runtime.
+
+** Unit tests.
Why do unit testing? It becomes simple to run automated tests
for the whole library. Unit tests are a safety net - you can
@@ -44,3 +191,83 @@
Normally, after you send a couple of well-written new files
and/or patches to the list, you will be given cvs access.
+<a name="compiler"></a>
+* Compiler tests
+
+ Mono ships with three compilers: C#, VB.NET and JScript. The
+ tests are ran by running the makefile target `make
+ run-test-local' in the appropriate directory.
+
+ The C# compilation tests live in mcs/tests, and the C# error
+ tests live in mcs/errors.
+
+ The VB.NET compilation tests live in mcs/btests.
+
+<a name="runtime"></a>
+* Runtime Tests
+
+ These tests verify the virtual machine, to run these tests, do:
+
+<pre>
+ cd mono/mono/tests
+ make test
+</pre>
+
+<a name="aspnet"></a>
+* ASP.NET tests
+
+ XSP, the Mono ASP.NET server has tests for ASP.NET pages. It uses
+ <a href="http://nunitasp.sourceforge.net">NUnitAsp</a>. Right now
+ it only has standalone tests, ie., tests that do not need their own
+ global.asax or web.config files.
+
+ If you want to run them, get the xsp CVS module and install it. Then:
+<pre>
+ cd xsp/nunit-tests
+ make
+ cd standalone
+ xsp
+</pre>
+
+ And from another terminal:
+<pre>
+ cd xsp/nunit-tests/standalone
+ nunit-console standalone-tests.dll
+</pre>
+
+<a name="ws"></a>
+* Web Services tests
+
+ The Test directory for the System.Web.Services assembly contains a
+ standalone test suite for testing web services. It tests:
+
+ <ul>
+ <li>Proxy generation using the wsdl tool</li>
+ <li>Access to web services using the generated client proxies</li>
+ <li>Execution of web services in the server</li>
+ </ul>
+
+ This suite not only tests web services running on XSP, but it can also test
+ services running on other platforms and that are available in internet. This
+ will help track down interoperability issues.
+
+ To build the test suite, just run:
+
+<pre>
+ cd mcs/class/System.Web.Services/Test/standalone
+ xsp --root server
+</pre>
+
+ And from another terminal:
+<pre>
+ cd mcs/class/System.Web.Services/Test/standalone
+ make
+ nunit-console testclient.dll
+</pre>
+
+ This will download the wsdl documents, generate the proxies, build a dll with
+ the proxies, and build the nunit tests. Then you can use nunit-console or
+ gnunit to run the tests (the nunit dll is testclient.dll).
+
+ Read the README file in mcs/class/System.Web.Services/Test/standalone for
+ more info.