From: Mark M. <mie...@gm...> - 2011-11-12 17:52:00
|
On Sat, Nov 12, 2011 at 6:49 AM, Jean-Louis Faucher <jfa...@gm...>wrote: > > Is it possible to execute only a specific method in a testgroup ? > my command is : rexx Stream.testGroup, launched from ooRexx/base/class > With my debug version in sandbox, it takes about 10s. Not so long, but > when repeated several times, it counts :-) > There are several ways you could do it. You could just add a temp change to the the test group file: parse source . . s group = .TestGroup~new(s) --group~add(.Stream.testGroup) --group~add(.StreamClassQualify_QueryExists) group~addWithCollection(.Stream.testGroup, .array~of('test_open_write_only_3274050')) if group~isAutomatedTest then return group say "Executing small test" testResult = group~suite~execute~~print return testResult Which is what I would do if I wanted to temporarily eliminate any excess time. You could add more test case names (method names) to the array. E:\work.ooRexx\wc\ooTest\4.x>rexx ooRexx\base\class\Stream.testGroup Executing small test Executing test_open_write_only_3274050 Interpreter: REXX-ooRexx_4.2.0(MT) 6.04 7 Nov 2011 Addressing Mode: 64 ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 Tests ran: 3 Assertions: 0 Failures: 0 Errors: 0 Skipped files: 0 Test execution: 00:00:00.016000 You could also simply copy the Stream.testGroup file to a second file and delete all the excess tests from the second file and run that. Just don't commit the second file. However, the first time I went to try my temp change above, it looked like nothing executed. When I looked at the test case I saw: ::method test_open_write_only_3274050 if .ooRexxUnit.OSName \== "WINDOWS" then do That's sort of ... well I don't know exactly what to call it. Each test case (individual method) should be generic and run on all platforms (preferable.) Or if it really is platform specific, it should be in a separate test group and marked that way. So, you should put your *nix only tests in a separate test group file and mark it as *nix only: group = .TestGroup~new(s) group~restrictOS('LINUX', 'SUNOS', 'AIX', 'MACOSX') Although, without giving a lot of thought to it, it seems better to me to make the test generic to all platforms. Test for Windows and use attrib instead of chmod. You could also write a small program to just execute a few methods in the Stream.testGroup and execute that program only. Something along the lines of: /* qTest.rex */ parse source . . s s = s~left(s~lastPos('\')) s ||= 'ooRexx\base\class\Stream.testGroup' group = .TestGroup~new(s) group~addWithCollection(.Stream.testGroup, .array~of('test_open_write_only_3274050')) say "Executing small test" group~suite~execute~~print ::requires 'ooRexx\base\class\Stream.testGroup' ::requires 'ooTest.frm' ::requires 'FileUtils.cls' Which produces for me, when run in the framework directory: E:\work.ooRexx\wc\ooTest\4.x>qTest.rex Executing small test Executing test_open_write_only_3274050 Interpreter: REXX-ooRexx_4.2.0(MT) 6.04 7 Nov 2011 Addressing Mode: 64 ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 Tests ran: 3 Assertions: 0 Failures: 0 Errors: 0 Skipped files: 0 Test execution: 00:00:00.015000 Executing small test Executing test_open_write_only_3274050 Interpreter: REXX-ooRexx_4.2.0(MT) 6.04 7 Nov 2011 Addressing Mode: 64 ooRexxUnit: 2.0.0_3.2.0 ooTest: 1.0.0_4.0.0 Tests ran: 3 Assertions: 0 Failures: 0 Errors: 0 Skipped files: 0 Test execution: 00:00:00.016000 You could put the program in the same directory as Stream.testGroup and do away with some of the path manipulation. > > Is there an assert which allows to continue the current method, even if > failed ? > I use self~assertSame, and in my test case, I know I can continue even if > the assert failed. > No, there is no way to continue. The framework is based on the theory that you should have many small tests, not one long continuous test. This: + -- Implicit opening of a non empty file + call deleteFile fileName + fileName = createFile(.array~of("line1"), fileName) + self~assertTrue(fileName \== "") 'chmod a+w,a-r' fileName + fsObj = .stream~new(fileName) + self~streamTestingFile = fsObj + line = "line2" + ret = fsObj~charout(line) + self~assertSame(0, ret) -- ko before fix + ret = fsObj~lineout(line) + self~assertSame(0, ret) + ret = fsObj~close + self~assertSame("READY:", ret) + + -- Explicit opening of an empty file, using ~open + call deleteFile fileName + fileName = createFile(.array~new, fileName) + self~assertTrue(fileName \== "") + 'chmod a+w,a-r' fileName + fsObj = .stream~new(fileName) + self~streamTestingFile = fsObj + ret = fsObj~open("write append") + self~assertSame("READY:", ret) -- ko before fix + line = "line1" + ret = fsObj~charout(line) + self~assertSame(0, ret) + ret = fsObj~lineout(line) + self~assertSame(0, ret) + ret = fsObj~close + self~assertSame("READY:", ret) should be at least 2 different tests, and really more like 5 o 6 tests (5 or 6 separate methods.) The theory behind the implementation is also that this is an *automated* framework for running the tests. Time shouldn't matter. If you put 6 tests into 1 test case (method) and the first test fails, the other 5 test cases don't execute. You don't want that. You want all 6 tests to execute and for the framework to report that 5 tests pass, 1 test fails. > Currently, i put in comment the assert, when the fail is as expected, and > relaunch the script to test the next assert, etc... > > > That sounds like you have the logic of the test backwards. You should write tests that are expected to pass. Without knowing the details, (so maybe I'm wrong,) I would say you can always write the inverse of you current test. -- Mark Miesfeld |