-
Notifications
You must be signed in to change notification settings - Fork 1.7k
[Crashlytics] Fix flaky tests #15551
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. |
Generated by 🚫 Danger |
|
/gemini review |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request effectively addresses flaky tests by refactoring the asynchronous testing logic. The previous approach of directly managing XCTestExpectation in the mock object was prone to race conditions. The new implementation using NSNotificationCenter is a much cleaner and more robust solution that decouples the mock from the test's expectation management. The changes also include correcting the expected number of file removals in testCorruptCache and cleaning up unused code in other tests, which improves the overall quality of the test suite.
|
/gemini review |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request effectively addresses flaky tests by refactoring the asynchronous testing logic. The move from direct XCTestExpectation management within the mock object to a more decoupled NSNotificationCenter-based approach is a significant improvement for test robustness and maintainability. Adding synchronization to FIRCLSMockFileManager is a crucial fix for thread-safety issues that were likely a primary source of flakiness. The other adjustments, such as correcting expected values and improving test cleanup, further enhance the quality of the test suite. I have one minor suggestion to make the test cleanup even more robust.
|
|
||
| - (void)tearDown { | ||
| [_userDefaults removeAllObjects]; | ||
| [[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey1]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adding cleanup for NSUserDefaults in tearDown is a great practice for improving test isolation. However, this change appears to be incomplete. Other tests, such as testMigrateFromNSUserDefaults, also set _testKey2 and _testKey3 on NSUserDefaults. To ensure comprehensive cleanup and prevent any state from leaking between tests (especially in cases where a test might fail before completing), it would be best to remove all keys that are set during testing.
[[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey1];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey2];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:_testKey3];
From Gemini: This pull request effectively addresses flaky tests by refactoring the asynchronous testing logic. The previous approach of directly managing XCTestExpectation in the mock object was prone to race conditions. The new implementation using NSNotificationCenter is a much cleaner and more robust solution that decouples the mock from the test's expectation management. The changes also include correcting the expected number of file removals in testCorruptCache and cleaning up unused code in other tests, which improves the overall quality of the test suite.