HackerTrans
TopNewTrendsCommentsPastAskShowJobs

ohbarye

no profile record

Submissions

Show HN: PBT – A property-based testing library for Ruby

github.com
196 points·by ohbarye·2 tahun yang lalu·33 comments

comments

ohbarye
·2 tahun yang lalu·discuss
It's very basic content though, here's the slides of my presentation at RubyKaigi 2024. This also includes the PBT gems's explanations.

https://speakerdeck.com/ohbarye/unlocking-potential-of-prope...

Speaking of my personal story, I used the fast-check documentation and Fred Herbert's book (their links are in the README) to study.
ohbarye
·2 tahun yang lalu·discuss
I love seeing people suggest clever names I couldn't have thought of.
ohbarye
·2 tahun yang lalu·discuss
Good point. There's already such a project to run PBT based on RBS. I'm also keeping an eye on this.

https://github.com/ksss/raap
ohbarye
·2 tahun yang lalu·discuss
Wow, I didn't know about them. Thanks for letting me know!
ohbarye
·2 tahun yang lalu·discuss
Yeah, the easiest way is to generate attributes and instantiate any Rails model like the one below:

    Pbt.assert do
      Pbt.property(name: Pbt.printable_string, age: Pbt.integer(min: 0, max: 100)) do |name:, age:|
        user = User.new(name: name, age: age)
        # write your test here
      end
    end
ohbarye
·2 tahun yang lalu·discuss
I think there are usually three actions a programmer can take when PBT fails.

- Create a test case that doesn't depend on PBT as you suggest.

- Fix the production code being tested since its failure is an unexpected bug.

- Fix the PBT itself. This means that the programmer has had wrong assumption for the test target.

I think it's difficult for the tool to know which choice is the best on a failure. But if there's any good idea, I'd like to incorporate it. :)
ohbarye
·2 tahun yang lalu·discuss
>yes, because you're changing the order in which the random draws are interpreted. But this isn't a problem in practice because you generally aren't changing the generator in the middle of debugging a failure.

Correct. The test inputs are determined by a seed and generators (including the order of generators).
ohbarye
·2 tahun yang lalu·discuss
I can really empathize. Hope the Ruby ecosystem gets more compatible with Ractor.
ohbarye
·2 tahun yang lalu·discuss
Thank you.

In my opinion, PBT should be used in combination with example-based testing. Besides, since example-based testing cases account for the majority of tests, I think it's rare that PBT's execution time is dominant.

As for the combination and usages, refs: https://medium.com/criteo-engineering/introduction-to-proper...
ohbarye
·2 tahun yang lalu·discuss
Thank you. I hope the gem will make your testing life happier!
ohbarye
·2 tahun yang lalu·discuss
The answer to both questions is yes.

This gem doesn't aim to reimplement a testing framework. It can also be considered just an assertion. You can use this alongside any testing framework like RSpec, minitest, and etc.
ohbarye
·3 tahun yang lalu·discuss
Maybe not only 100 lines of code though, I think of Code Crafters. https://github.com/codecrafters-io/build-your-own-x
ohbarye
·4 tahun yang lalu·discuss
This comment describes well. https://github.com/rails/rails/pull/45553#issuecomment-11795...