mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-09-03 08:27:29 +02:00
Unexpected state API behaviour around unset state #270
Closed
opened 2025-12-29 15:19:27 +01:00 by adam
·
6 comments
No Branch/Tag Specified
master
1341-mapping-json
stef-aspire-tests-updates
bug/973-TinyMapper
bug/1149-AppendGuidToSavedMappingFile
feature/1150-DockerImageVersion
61
stef-1108
stef-1097
stef-1083-MessageOptions_Type_Conflict
stef-1062-logger
stef-IgnoreOpenApiErrors
stef-928-TypeLoadException-FluentAssertions-net472
nunit
stef-849
stef-847-regex-questionmark
http_verb
WireMockServerContext
webapp
ai
CommandLineArgumentsParser
2.15.0
2.14.0
2.13.0
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.25.0
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.2
1.11.0
1.10.1
1.10.0
1.9.1
1.9.0
1.8.18
1.8.17
1.8.16
1.8.15
1.8.14
1.8.13
1.8.12
1.8.11
1.8.10
1.8.9
1.8.8
1.8.7
1.8.6
1.8.5
1.8.3
1.8.2
1.8.1
1.8.0
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.62
1.5.61
1.5.60
1.5.59
1.5.58
1.5.57
1.5.56
1.5.55
1.5.54
1.5.53
1.5.52
1.5.51
1.5.50
1.5.49
1.5.48
1.5.47
1.5.46
1.5.45
1.5.44
1.5.43
1.5.42
1.5.41
1.5.40
1.5.39
1.5.38
1.5.37
1.5.36
1.5.35
1.5.34
1.5.33
1.5.32
1.5.31
1.5.30
1.5.29
1.5.28
1.5.27
1.5.26
1.5.25
1.5.24
1.5.23
1.5.22
1.5.21
1.5.20
1.5.19
1.5.18
1.5.17
1.5.16
1.5.15
1.5.14
1.5.13
1.5.12
1.5.11
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.43
1.4.42
1.4.41
1.4.40
1.4.39
1.4.38
1.4.37
1.4.36
1.4.35
1.4.34
1.4.33
1.4.32
1.4.31
1.4.30
1.4.29
1.4.28
1.4.27
1.4.26
1.4.25
1.4.24
1.4.23
1.4.22
1.4.21
1.4.20
1.4.19
1.4.18
1.4.17
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.10
1.3.9
1.3.8
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.18
1.2.17
1.2.16
1.2.15
1.2.14
1.2.13
1.2.12
1.2.11.0
1.2.10
1.2.9.0
1.2.8.0
1.2.7.0
1.2.6.0
1.2.5.0
1.2.4.0
1.2.3.0
1.2.2.0
1.2.1.0
1.2.0.0
1.1.10
1.1.9.0
1.1.8.0
1.1.7.0
1.1.6.0
1.1.5.0
1.1.3.0
1.1.2.0
1.1.1.0
1.1.0.0
1.0.43.0
1.0.42.0
1.0.41.0
1.0.40.0
1.0.39.0
1.0.38.0
1.0.37.0
1.0.36.0
1.0.35.0
1.0.34.0
1.0.33.0
1.0.32.0
1.0.31.0
1.0.29.0
1.0.28.0
1.0.25.0
1.0.24.0
1.0.23.0
1.0.22.0
1.0.21.0
1.0.20.0
1.0.19.0
1.0.18.0
1.0.17.0
1.0.16.0
1.0.15.0
1.0.14.0
1.0.13.0
1.0.12.0
1.0.11.0
1.0.10.0
1.0.9.0
1.0.8.0
1.0.7.0
1.0.6.1
1.0.6
1.0.5
1.0.4.21
1.0.4.20
1.0.4.19
1.0.4.18
1.0.4.17
1.0.4.16
1.0.4.15
1.0.4.14
1.0.4.13
1.0.4.12
1.0.4.11
1.0.4.10
1.0.4.9
1.0.4.8
1.0.4.7
1.0.4.6
1.0.4.5
1.0.4.4
1.0.4.3
1.0.4.2
1.0.4.1
1.0.4.0
1.0.3.20
1.0.3.19
1.0.3.18
1.0.3.17
1.0.3.16
1.0.3.15
1.0.3.14
1.0.3.13
1.0.3.12
1.0.3.11
1.0.3.10
1.0.3.9
1.0.3.8
1.0.3.7
1.0.3.6
1.0.3.5
1.0.3.4
1.0.3.3
1.0.3.2
1.0.3.1
1.0.3.0
1.0.2.13
1.0.2.12
1.0.2.11
1.0.2.10
1.0.2.9
1.0.2.8
1.0.2.7
1.0.2.6
1.0.2.5
1.0.2.4
1.0.2.1
1.0.2.0
1.0.1.5
1.0.1.3
1.0.1.2
1.0.1.1
1.0.0.0
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
adam (Adam Melkus)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/WireMock.Net-wiremock#270
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Originally created by @arturohernandez10 on GitHub (May 1, 2020).
The following code would appear to leave the state unchanged. But after this is matched in runtime. The state will be reset to "nothing" like it had never been set.
Leading to the following code that is unnecessarily verbose. Particularly with a fluent API. Where the intention seems to underspecify a mock API. And leave the tool to make educated choices.
@StefH commented on GitHub (May 11, 2020):
Can you take a look at the Wiki : https://github.com/WireMock-Net/WireMock.Net/wiki/Scenarios-and-States and check if this is working for you?
@StefH commented on GitHub (Aug 1, 2020):
@arturohernandez10
Does the wiki help you using Scenarios and States? Or do you still have some questions?
@StefH commented on GitHub (Aug 25, 2020):
@arturohernandez10
Did you find a solution in the WIKI?
@arturohernandez10 commented on GitHub (Aug 28, 2020):
The wiki is not very explicit. No. the issue is: you have to specify the next state. Otherwise the state is cleared. The example agrees with not_set -> A , A -> B, B -> not_set. But in many state driven definitions, it is perfectly valid to specify behavior on a given state. Following you wiki example, if a delete was not valid when the to-do list was just started. You might want to do this:
But have one more like this and the test would not work, and you may be thoroughly confused as of why. It seems perfectly normal. You are in the
TodoList State Startedand theTo do listscenario. Why is this not working? Well, because you actually specified.WhenStateIs("TodoList State Started").WillSetStateTo(<<implicit_state_not_set_state>>)If the idea is for users to write this request/response expressions or every single test case; then it makes sense. But if you also want to support the creation of testing fixtures, that can be reused by a broader set of use cases. Then the user has to write.WhenStateIs("TodoList State Started").WillSetStateTo("TodoList State Started")which I don't think is intuitive. maybe you need to add some other method like.WhenStateWillContinueToBe("TodoList State Started")or something more creative.Or even better add a
WhenStateIsV2andWillSetStateTo2that don't set the state tonot_set. Again creativity on naming is required.Thanks for the question!!!
@StefH commented on GitHub (Aug 30, 2020):
@arturohernandez10
Now I understand your question.
Actually, your question looks a lot like this issue : https://github.com/WireMock-Net/WireMock.Net/issues/494
Which was solved by adding an times parameter to the WillSetStateTo method:
IRespondWithAProvider WillSetStateTo(string state, int? times = 1);In your case, you can set the value for the times to
Int32.MaxValue.I think this solves your issue. Can you take a look and test ?
Wiki has been updated : The number of times this match should be matched before the state will be changed to the specified one. Default value is 1.
@arturohernandez10 commented on GitHub (Sep 4, 2020):
@StefH
Awesome!! I like this library, that comment may have spared me from some confusion. It may help someone else. Next time I use this tool, I'll create an extension method as a shortcut for
.WhenStateIs("x").WillSetStateTo("x")and I'll post it here if anyone prefers to use it.Thanks!