Title: Introduce object creation using builders for fuzzers by Markoutte · Pull Request #2583 · UnitTestBot/UTBotJava · GitHub
Open Graph Title: Introduce object creation using builders for fuzzers by Markoutte · Pull Request #2583 · UnitTestBot/UTBotJava
X Title: Introduce object creation using builders for fuzzers by Markoutte · Pull Request #2583 · UnitTestBot/UTBotJava
Description: Description We introduce new BuilderObjectValueProvider for Java that finds any method, that can create a value of given type. Together with AbstractObjectValueProvider it works only when ObjectValueProvider and others fails to build a value. The provider searches any method from any class that can return object of this type or any type that can be inferenced from the given one. It doesn't matter if this method static or not, but if this method is not static, that we suppose that we have a builder class for it. As a builder class we try to find other methods that returns an instance of this builder. This logic added because of default way to create such builder, where any set or add method returns the instance of builder to support chain calling. This builder should work to find methods for factories and singletones as well. To support this provider, we introduce new routine in fuzzer's API called Modify (the name maybe is not final). It is added for Seed.Recurisve and works as follows: it accepts a sequence of routines that changes or creates new object with given this instance and fuzzed values. For example, we firstly create builder's object and update it with builder method, then finally we call the method, that creates an object using this builder. This sequence is always called when creating an object and never changed its ordering. In addition, you can use this method, apply some method to the instance and return the instance object itself, for example, to always close a Closable object. As a result, ContestEstimator covers 53% of guava project code, before it covers only 43%. How to test Automated tests All fuzzer tests should pass. Manual tests You can try to generate tests for this little project: public interface Muzzi { int getA(); } public class RealMuzzi implements Muzzi { private final int a; private RealMuzzi(int a) { this.a = a; } @Override public int getA() { return a; } public static class Builder { private int a; public Builder setA(int a) { this.a = a; return this; } public Muzzi build() { return new RealMuzzi(a); } } } public class MuzziTest { public int size(Muzzi muzzi) { if (muzzi.getA() < 0) { return -1; } else if (muzzi.getA() > 0) { return 1; } return 0; } } Self-check list Check off the item if the statement is true. Hint: [x] is a marked item. Please do not delete the list or its items. I've set the proper labels for my PR (at least, for category and component). PR title and description are clear and intelligible. I've added enough comments to my code, particularly in hard-to-understand areas. The functionality I've repaired, changed or added is covered with automated tests. Manual tests have been provided optionally. The documentation for the functionality I've been working on is up-to-date.
Open Graph Description: Description We introduce new BuilderObjectValueProvider for Java that finds any method, that can create a value of given type. Together with AbstractObjectValueProvider it works only when ObjectVal...
X Description: Description We introduce new BuilderObjectValueProvider for Java that finds any method, that can create a value of given type. Together with AbstractObjectValueProvider it works only when ObjectVal...
Opengraph URL: https://github.com/UnitTestBot/UTBotJava/pull/2583
X: @github
Domain: patch-diff.githubusercontent.com
| route-pattern | /:user_id/:repository/pull/:id/checks(.:format) |
| route-controller | pull_requests |
| route-action | checks |
| fetch-nonce | v2:d89a901d-9304-22b3-3961-fd93edfb1198 |
| current-catalog-service-hash | 87dc3bc62d9b466312751bfd5f889726f4f1337bdff4e8be7da7c93d6c00a25a |
| request-id | 88C6:DC7A5:77F15A:A0968E:698EDA1E |
| html-safe-nonce | 0ae984f5413a3511f2ff3f71ec72c584b43967706238ba52c610e79919980df1 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4OEM2OkRDN0E1Ojc3RjE1QTpBMDk2OEU6Njk4RURBMUUiLCJ2aXNpdG9yX2lkIjoiNTE3MzA1ODI5MDM5NzkyNzk2NiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 9bd05866788933dcc8300e80d5777957674ae4555ace4d84482ad259d9e17518 |
| hovercard-subject-tag | pull_request:1507351817 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,checks,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/UnitTestBot/UTBotJava/pull/2583/checks |
| twitter:image | https://avatars.githubusercontent.com/u/720952?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/720952?s=400&v=4 |
| og:image:alt | Description We introduce new BuilderObjectValueProvider for Java that finds any method, that can create a value of given type. Together with AbstractObjectValueProvider it works only when ObjectVal... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | cb2828a801ee6b7be618f3ac76fbf55def35bbc30f053a9c41bf90210b8b72ba |
| turbo-cache-control | no-preview |
| go-import | github.com/UnitTestBot/UTBotJava git https://github.com/UnitTestBot/UTBotJava.git |
| octolytics-dimension-user_id | 87413538 |
| octolytics-dimension-user_login | UnitTestBot |
| octolytics-dimension-repository_id | 480810501 |
| octolytics-dimension-repository_nwo | UnitTestBot/UTBotJava |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 480810501 |
| octolytics-dimension-repository_network_root_nwo | UnitTestBot/UTBotJava |
| turbo-body-classes | logged-out env-production page-responsive full-width full-width-p-0 |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | e6b91a7e6e46287d26887e3fb7a4161657bab8f7 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width