fsolve is not a global solver. There are global solvers (like genetic algorithms and simulated annealing), but they have to run for an infinite amount of time to guarantee that the returned solutions comprise all of the minimizers. On the hand, almost all other optimization solvers are local, meaning that they will only guarantee that a local minimizer is returned.
Furthermore, in addition to not knowing whether the returned solution is a global or local minimizer, there is, in general, no way of determining how many roots a problem has. So basically, there is no way of doing what you want except for 2 well known cases:
1) If the problem is convex, then there are no local minimizers that are not global minimizers. So anything returned by fsolve will be a global minimizer. Furthermore, this minimizer is almost always unique. The exception is that technically, there can exist an infinite number of solutions, but they will all be connected (like on a specific plane). There cannot exist a finite number of distinct minimizers that are not connected.
2) Polynomials have a distinct number of roots that we can uniquely determine.