Agree. Clarifying once more what our preferred option is here, is a good idea. So, +1 for unification. I don't have a strong opinion on what framework to use. But we may want to add this at the end of the discussion to our documentation (e.g. [1] or maybe the PR description?) to make users aware of it and be able to provide a reference in case it comes up again (besides this ML thread). Or do we already have something like that somewhere in the docs where I missed it?
Matthias [1] https://cwiki.apache.org/confluence/display/FLINK/Best+Practices+and+Lessons+Learned On Wed, Nov 17, 2021 at 11:13 AM Marios Trivyzas <mat...@gmail.com> wrote: > I'm also +1 both for unification and specifically for assertJ. > I think it covers a wide variety of assertions and as Francesco mentioned > it's easily extensible, so that > we can create custom assertions where needed, and avoid repeating test > code. > > On Tue, Nov 16, 2021 at 9:57 AM David Morávek <d...@apache.org> wrote: > > > I don't have any strong opinions on the asserting framework that we use, > > but big +1 for the unification. > > > > Best, > > D. > > > > On Tue, Nov 16, 2021 at 9:37 AM Till Rohrmann <trohrm...@apache.org> > > wrote: > > > > > Using JUnit5 with assertJ is fine with me if the community agrees. > Having > > > guides for best practices would definitely help with the transition. > > > > > > Cheers, > > > Till > > > > > > On Mon, Nov 15, 2021 at 5:34 PM Francesco Guardiani < > > > france...@ververica.com> > > > wrote: > > > > > > > > It is a bit unfortunate that we have tests that follow different > > > > patterns. > > > > This, however, is mainly due to organic growth. I think the community > > > > started with Junit4, then we chose to use Hamcrest because of its > > better > > > > expressiveness. > > > > > > > > That is fine, I'm sorry if my mail felt like a rant :) > > > > > > > > > Personally, I don't have a strong preference for which testing > tools > > to > > > > use. The important bit is that we agree as a community, then document > > the > > > > choice and finally stick to it. So before starting to use assertj, we > > > > should probably align with the folks working on the Junit5 effort > > first. > > > > > > > > As Arvid pointed out, using assertj might help the people working on > > the > > > > junit5 effort as well, since assertj works seamlessly with junit4, > > junit5 > > > > and even other java testing frameworks. > > > > > > > > > But I'm not sure if it's wise to change everything at once also > > > > from the perspective of less active contributors. We may alleviate > that > > > > pain by providing good guides though. So maybe, we should also > include > > a > > > > temporal dimension into the discussion. > > > > > > > > This is why I'm proposing a convention and not a rewrite of all the > > tests > > > > at once, that's unfeasible. As you sad, we can provide guides, like > in > > > our > > > > contribution guides, explaining our assertion convention, that is use > > > > assertj or whatever other library we want to use and how. So then we > > can > > > > ask contributors to use such assertion convention when they PR new > > tests > > > or > > > > when they modify existing ones. Something like that: > > > > > > > > > > https://github.com/apache/flink-web/commit/87c572ccd4e0ae48eeff3eb15ad9847d302e659d > > > > > > > > On Fri, Nov 12, 2021 at 5:07 PM Arvid Heise <ar...@apache.org> > wrote: > > > > > > > >> JUnit5 migration is currently mostly prepared. The rules are being > > > >> migrated > > > >> [1] and Hang and Qingsheng have migrated most tests in their branch > > > afaik > > > >> (Kudos to them!). > > > >> > > > >> Using assertj would make migration easier as it's independent of the > > > JUnit > > > >> version. But the same can be said about hamcrest, albeit less > > > expressive. > > > >> > > > >> I'm personally in favor of assertj (disclaimer I contributed to the > > > >> project > > > >> a bit). But I'm not sure if it's wise to change everything at once > > also > > > >> from the perspective of less active contributors. We may alleviate > > that > > > >> pain by providing good guides though. So maybe, we should also > > include a > > > >> temporal dimension into the discussion. > > > >> > > > >> [1] https://github.com/apache/flink/pull/17556 > > > >> > > > >> On Fri, Nov 12, 2021 at 3:58 PM Till Rohrmann <trohrm...@apache.org > > > > > >> wrote: > > > >> > > > >> > Thanks for starting this discussion Francesco. I think there is a > > lot > > > of > > > >> > value in consistency because it makes it a lot easier to navigate > > and > > > >> > contribute to the code base. The testing tools are definitely one > > > >> important > > > >> > aspect of consistency. > > > >> > > > > >> > It is a bit unfortunate that we have tests that follow different > > > >> patterns. > > > >> > This, however, is mainly due to organic growth. I think the > > community > > > >> > started with Junit4, then we chose to use Hamcrest because of its > > > better > > > >> > expressiveness. Most recently, there was an effort started that > > aimed > > > at > > > >> > switching over to Junit5 [1, 2]. @Arvid Heise <ar...@apache.org> > > > knows > > > >> > more about the current status. > > > >> > > > > >> > Personally, I don't have a strong preference for which testing > tools > > > to > > > >> > use. The important bit is that we agree as a community, then > > document > > > >> the > > > >> > choice and finally stick to it. So before starting to use assertj, > > we > > > >> > should probably align with the folks working on the Junit5 effort > > > first. > > > >> > > > > >> > [1] > > https://lists.apache.org/thread/jsjvc2cqb91pyh47d4p6olk3c1vxqm3w > > > >> > [2] > > https://lists.apache.org/thread/d9y5tzcl8wpk6ozmf8575qfzww450jpk > > > >> > > > > >> > Cheers, > > > >> > Till > > > >> > > > > >> > On Fri, Nov 12, 2021 at 3:41 PM David Anderson < > > dander...@apache.org> > > > >> > wrote: > > > >> > > > > >> >> For what it's worth, I recently rewrote all of the tests in > > > >> flink-training > > > >> >> to use assertj, removing a mixture of junit4 assertions and > > hamcrest > > > in > > > >> >> the > > > >> >> process. I chose assertj because I found it to be more expressive > > and > > > >> made > > > >> >> the tests more readable. > > > >> >> > > > >> >> +1 from me > > > >> >> > > > >> >> David > > > >> >> > > > >> >> On Fri, Nov 12, 2021 at 10:03 AM Francesco Guardiani < > > > >> >> france...@ververica.com> wrote: > > > >> >> > > > >> >> > Hi all, > > > >> >> > > > > >> >> > I wonder If we have a convention of the testing tools (in > > > particular > > > >> >> > assertions) to use in our tests. If not, are modules free to > > decide > > > >> on a > > > >> >> > convention on their own? > > > >> >> > > > > >> >> > In case of table, we have a mixed bag of different assertions > of > > > all > > > >> >> kinds, > > > >> >> > sometimes mixed even in the same test: > > > >> >> > > > > >> >> > - Assertions from junit 4 > > > >> >> > - Assertions from junit 5 > > > >> >> > - Hamcrest > > > >> >> > - Some custom assertions classes (e.g. > RowDataHarnessAssertor) > > > >> >> > - assert instructions > > > >> >> > > > > >> >> > The result is that most tests are very complicated to read and > > > >> >> understand, > > > >> >> > and we have a lot of copy pasted "assertion methods" all around > > our > > > >> >> > codebase. > > > >> >> > > > > >> >> > For table in particular, I propose to introduce assertj [1] and > > > >> develop > > > >> >> a > > > >> >> > couple of custom assertions [2] for the types we use most in > our > > > >> tests, > > > >> >> > e.g. Row, RowData, DataType, LogicalType, etc... For example: > > > >> >> > > > > >> >> > assertFalse(row.isNullAt(1)); > > > >> >> > assert row instanceof GenericRowData; > > > >> >> > assertEquals(row.getField(1), > > > >> >> TimestampData.ofEpochMillis(expectedMillis)); > > > >> >> > > > > >> >> > Could be: > > > >> >> > > > > >> >> > assertThat(row) > > > >> >> > .getField(1, TimestampData.class) > > > >> >> > .isEqualToEpochMillis(expectedMillis) > > > >> >> > > > > >> >> > We could have these in table-common so every part of the table > > > stack > > > >> can > > > >> >> > benefit from it. Of course we can't take all our tests and > > convert > > > >> them > > > >> >> to > > > >> >> > the new assertions, but as a policy we can enforce to use the > new > > > >> >> > assertions convention for every new test or for every test we > > > modify > > > >> in > > > >> >> > future PRs. > > > >> >> > > > > >> >> > What's your opinion about it? Do you agree to have such kind of > > > >> policy > > > >> >> of > > > >> >> > using the same assertions? If yes, do you like the idea of > using > > > >> >> assertj to > > > >> >> > implement such policy? > > > >> >> > > > > >> >> > FG > > > >> >> > > > > >> >> > [1] A library for assertions https://assertj.github.io, > already > > > >> used by > > > >> >> > the > > > >> >> > pulsar connector > > > >> >> > [2] > > > >> >> > > > https://assertj.github.io/doc/#assertj-core-custom-assertions-creation > > > >> >> > -- > > > >> >> > > > > >> >> > Francesco Guardiani | Software Engineer > > > >> >> > > > > >> >> > france...@ververica.com > > > >> >> > > > > >> >> > > > > >> >> > <https://www.ververica.com/> > > > >> >> > > > > >> >> > Follow us @VervericaData > > > >> >> > > > > >> >> > -- > > > >> >> > > > > >> >> > Join Flink Forward <https://flink-forward.org/> - The Apache > > Flink > > > >> >> > Conference > > > >> >> > > > > >> >> > Stream Processing | Event Driven | Real Time > > > >> >> > > > > >> >> > -- > > > >> >> > > > > >> >> > Ververica GmbH | Invalidenstrasse 115, 10115 Berlin, Germany > > > >> >> > > > > >> >> > -- > > > >> >> > > > > >> >> > Ververica GmbH > > > >> >> > > > > >> >> > Registered at Amtsgericht Charlottenburg: HRB 158244 B > > > >> >> > > > > >> >> > Managing Directors: Karl Anton Wehner, Holger Temme, Yip Park > > Tung > > > >> >> Jason, > > > >> >> > Jinwei (Kevin) Zhang > > > >> >> > > > > >> >> > > > >> > > > > >> > > > > > > > > > > > > -- > Marios