Please see my comments inline. On 03 Jun 2014, at 12:57, James Graham <ja...@hoppipolla.co.uk> wrote:
> I'm not sure I grasp your overall point, but I have a few comments. > > On 03/06/14 11:22, Mike de Boer wrote: >> 1. The `Assert.*` namespace is optional and may be omitted. This >> module is also present in the addon-sdk and used _with_ that >> namespace, usually with a lowercase `assert.*`. Please pick whatever >> suits your fancy. > > FWIW I consider that like other code tests should be optimised for > maintainability. Taking the position "pick whatever" doesn't help with this. > >> 2. testharness.js, Mochitest, XPCShell’s head.js and other >> suite-runners that we use in-tree are needlessly monolithic. > > It's not needless if you want to run in non-Mozilla environments where > jaascript modules don't yet exist. For platform-level tests, being able > to cross check our implementation against other implementations has > considerable value. > >> They mix >> defining assertion methods, test setup, test definition, test >> teardown in one silo and dogmatically impose a test definition style. >> Their lack of modularity costs us flexibility in adopting and/ or >> promoting TDD development. They are, however, great for writing >> regression tests and that’s what we use them for. > > I'm not sure I understand this criticism. testharness.js and Mochitest, > at least, are not really intended for writing unit tests, but for > writing functional tests. I have had no problem using testharness.js in > a setup where a comprehensive upfront testsuite was written in parallel > with the code, which seems to be pretty close to a TDD ethos. I don't > think that technical problems are preventing us adopting this > development methodology. > > (Maybe for testing frontend code one can use mochitest for unit tests. I > don't know how that works). > >> 4. None of the test-suites promote modularity and needlessly dictate >> a reporting style. What I mean by this is that there’s no way to hook >> different reporting styles in a test runner to promote TDD, for >> example. What does automation use to detect test failures? TAP[1] is >> something efficient and optimised for machine-reading, but we parse >> output lines in a format that is far from an industry standard. We >> humans delve through a whole bunch of scroll back to find the test >> case/ assertion we’re interested in. We even rely on our tooling to >> repeat all the failing tests at the end of a run. > > Yes, the way we deal with test output has historically been suboptimal. > We are in the process of fixing that as we speak. We have developed a > json-based protocol [1] for test output. This is already being used for > web-platform-tests, and for FirefoxOS certsuite. There is current work > in progress for converting mochitest and marionette tests to this > format. Other suites will follow. Do you have bug numbers where I can follow that work in progress? It sounds awesome! > > As you say, once we are using structured logging rather than trying to > parse human-readable logging, it should be possible to do a lot more > interesting things with the logging results. The structured logging > package already comes with formatters for a small number of formats > including, for example, something XUnit XML compatible. There are also > lots of ideas for how to improve the user interface to test results in > automation. These will come after the launch of treeherder. > >> 5. Assertion semantics are indeed poorly specified, across the board. >> Our switch from `do_check_matches()` to `deepEqual()` even revealed a >> buggy implementation there, which we didn’t know about. Apart from >> that, it was largely undocumented, not fully covered by unit tests >> except for the pathological cases. I’m actually a bit scared of what >> I’ll find in Mochitest[3] Type coercion is something specifiable, but >> I’m not sure whether that is something `ok`, `equal` and family >> should implement guards for. If there’s a wish/ call for more >> specific assertion methods like `is_truthy`, `is_falsy` and variants >> for all possible coercion traps, I think there’s room in Assert.jsm >> to add those. We are in the sad status quo that all assertion methods >> in all test suites are underspecified to some degree. The fact that >> these methods are an integral part of each suite makes it harder to >> change that. Assert.jsm breaks away from that approach to make these >> improvements possible to a wider audience. If we agree that more >> spec’ing is needed, we might as well fork the spec[2] to MDN and >> collectively work it out. > > Changing the semantics of things that people are already using seems > like a uphill battle. I think if you wanted to introduce a common set of > assertion names across Mozilla harnesses, starting from CommonJS rather > than starting from a discussion of actual requirements was the wrong > approach. That’s not what we’re doing here! Changing semantics is a non-goal, merging assertion methods into one re-usable module is. Taking the CommonJS spec as an umbrella for these simple assertion methods is a causality and I think it helps provide a common, immediate understanding for new contributors who’d like to write test for the code they contribute. Sure, the semantics of `do_check_matches()` changed. But that method was only used in two locations, its use not promoted in any wiki page and its implementation lossy. > >> 7. Names of assertion methods are an excellent reason for >> bikeshedding. The main reason for the amount of time it took for the >> spec[2] to be formalised was exactly this, IIRC. Never mind that, >> like I said before: I’m fine with forking the spec and adding aliases >> for each assertion method if need be. I mostly care about the fact >> that we can implement them in one place. > > At least for testharness.js that would directly conflict with the hard > requirement for cross-browser compatibility. The specific choice of > methods here would also conflict with other lower level goals like > consistency of style and ease of writing good tests. > > [1] http://mozbase.readthedocs.org/en/latest/mozlog_structured.html > _______________________________________________ > dev-platform mailing list > dev-platform@lists.mozilla.org > https://lists.mozilla.org/listinfo/dev-platform _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform