You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
abatishchev
changed the title
DynamicData test with object having implicit conversion to string leads to corrupted parameter
DynamicData test with parameter struct having implicit conversion to string leads to corrupted parameter
Oct 21, 2024
By default, MSTest tries to expand the parameterized tests to provide better experience in IDEs. To do so, the current solution is to serialize the data using JSON data contract serializer. Because your data isn't serializable, when reaching the method the data is null.
You could workaround that by adding the [Serializable] attribute on top of the AccountKind and if that's a production oriented type that you cannot/don't want to tweak for tests then I recommend to use an intermediate "test" type that would then be converted in the real type within the test method.
When using [TestDataSourceDiscovery(TestDataSourceDiscoveryOption.DuringExecution)] you are disabling the expansion of the data, removing the need to serialize the data. The result is that multiples results are attached to the same test (as you can see on screenshot 1).
I am not a big fan of the decision that was made to have the data serialized but we cannot easily change that without introducing breaking changes. I want to make some test to see if we could use a workaround to use an index based solution (with a manual optin) to avoid this issue. The only problem with index based solution is that we need the data source to be deterministic (e.g. a randomized data source index is not guaranteeing to produce the same data).
Describe the bug
Given a struct with an implicit conversion to string (operator overload
And a test method which accepts it as a parameter via a
[DynamicData]
attribute:What happens then:
null
:Notes:
[TestDataSourceDiscovery(TestDataSourceDiscoveryOption.DuringExecution)]
string
(see the attached repro for an example)class
Steps To Reproduce
Attached a sample project: TestProject1.zip
Expected behavior
Test method is executed 3 times, each times receives a parameter with the correct value
Actual behavior
Test method is executed 1 time, it receives a parameter with
null
Additional context
VS 2022 version 17.11.5
The text was updated successfully, but these errors were encountered: