|
That's the only way I know to get the Windows that are created by the process.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
[EDIT]
I agree with Eddy Vluggen that you don't need to keep focus to the document/application to be able to paste piece od text. You need to refer to the document you want to use:
document = InstanceOfWord.Documents["ShortDocumentName.docx"];
document.Selection.PasteSpecial();
document = InstanceOfWord.Documents("ShortDocumentName.docx")
document.Selection.PasteSpecial()
More at MSDN: How to: Programmatically Insert Text into Word Documents
But, if a requirement is to keep focus, there's good news: there's buit-in method called: Document.Activate Method (Word)
InstanceOfWord.Documents["ShortDocumentName.docx"].Activate;
InstanceOfWord.Documents("ShortDocumentName.docx").Activate
|
|
|
|
|
I used to unit test private methods, then some people advised me not to do so...
What do you think? should I unit test only public methods or private methods as well?
|
|
|
|
|
This is one of those questions that can end up in semi-religious wars with people wanting to burn the heretics who don't do things "their way". If you are part of a team and the standard is to just test public implementations, then you just test public implementations. If that team insists on unit testing everything, then test the private methods as well.
I have to admit that I prefer tests that only test the public methods. Basically, if you have a private method that you can't get to somehow via your public methods then either that code is "dead code", or you have a serious problem with your architecture and are relying on reflection in the main codebase to get at this code and run it. Thing is, if you follow SOLID principals, no single part of your codebase should be that large that you can't adequately cover the private methods via the public methods/properties.
This space for rent
|
|
|
|
|
Very pragmatic! Spot on.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Don't you think that testing only the public methods creates a problem?
When a test of a public method fails, it is not clear where it fails. Is it in the public method called directly by the test, or in a private method called by the public method?
|
|
|
|
|
Member 13624012 wrote: Don't you think that testing only the public methods creates a problem? No I don't.Member 13624012 wrote: When a test of a public method fails, it is not clear where it fails. Is it in the public method called directly by the test, or in a private method called by the public method? Where it occurs is immaterial; the important thing is that the test failed. You have a predictable input (or set of inputs) going into a method that cause it to fail; debugging through the failure is a simple enough task that it doesn't matter.
To put things into perspective; if you have to debug private methods, you are introducing a coupling in that your test has to know how the methods behave and recreate the conditions necessary immediately before calling the method, so you need to take things like state into account. What you have done here is make it harder to change the working of code because any change will probably necessitate changing the tests as well. This is testing the "how" of the code. If you are testing public methods, you are more likely to be testing the behaviour of the code, so the inner logic has much more room to change.
An example might suffice here. Suppose I have a piece of code that writes to a log and returns a value to indicate that the log was successfully updated, and I have a test to ensure I get that value back; now, if I just test the public call of WriteToLog, I can ignore what happens inside and check the return value to ensure I get the expected one back - I'm ignoring the fact that, initially, I was logging to the file system (the how) and am now logging to a database. As long as I get that value back, I know that the particular piece of code behaved itself. This becomes much more important when you consider that I build up systems organically, so my initial internals would probably be a dummy logger which I would then build out and replace.
This space for rent
|
|
|
|
|
I would say that you have to test both, sorry.
Just to prevent you from hiding complexity in the private members and having each public member point to something private.
Bad of trust? Yes, but also a fan of proving that stuff works as intended. Too much proof is never a negative, is it?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Yes, I agree with you. I think that there's no such thing as too many unit tests!
|
|
|
|
|
The opinions vary on this subject, so I'll say it depends.
Those who oppose testing private methods, claim that you should only test the public API.
This makes a certain sense, as testing private methods will usually lead to testing implementation, while unit tests should test behavior and if that code needs to be tested then there's a code smell and a design problem. Also by testing public API you indirectly already test the private method - that's also what encapsulation is for.
The private testing proponents claim that you should test as much logic as possible and if there's a reason to test a private method you should.
I believe that good design would usually reduce the need for testing private methods, but there are still some reasons for testing private methods.
Let's not forget that there's also a lot of legacy code that wasn't designed to be testable, so testing private methods would make more sense in order to refactor that code.
Problem with that is how to test private methods, as mocking is usually limited to public and virtual methods unless you use "unlimited" mocking tools.
So you should decide what is the right path for you or your team, just be consistent.
|
|
|
|
|
It depends on your risk-estimation.
If you think the private methods are fault-free. => No UnitTest
If you think the private methods can have bugs, but the consequences are tolerable. => No UnitTest
If you think the private methods can have bugs, but the consequences are NOT tolerable. => Unittest them.
Example 1:
If you are contributing "private" code to your team and you think some bugs are tolerable => No Unittest.
Example 2:
If your "private" code controls the cooling-system of a nuclear power-plant and you think the risk of bugs is tolerable => No UnitTest
If you consider your question in this way (as I do in practice), the answer is quite easy.
If you still don't know what to do, ask your boss, if he accepts bugs in "private" code or not.
modified 23-Feb-18 16:34pm.
|
|
|
|
|
Hello:
I simply want to write multiple queries to assign information.
var q =
from a1 in dt_Jobs.AsEnumerable()
orderby a1.Field<String>("Customer")
select a1.Field<String>("Customer");
var lstCustomer = q.Distinct().ToList();
cboCustomer.DataSource = lstCustomer;
q =
from a1 in dt_Jobs.AsEnumerable()
orderby a1.Field<String>("City")
select a1.Field<String>("City");
var lstCity = q.Distinct().ToList();
cboCity.DataSource = lstCity;
The first block works, the second fails. How can I achieve something like this??
Thanks!
|
|
|
|
|
You're going to have to explain what "fails" means. Did it throw an exception? What was the message?
Does something not work as expected? How so and under what conditions?
|
|
|
|
|
I am trying to set the datasources for comboboxes.
There is a datasource in the first, but not in the second. If I flip them around, I get the opposite effect.
|
|
|
|
|
Sorry for the confusion, there are errors.
Exception thrown: 'System.FormatException' in mscorlib.dll
Exception thrown: 'System.NullReferenceException' in ResourcePlanningC2.exe
Exception thrown: 'System.InvalidCastException' in mscorlib.dll
Exception thrown: 'System.NullReferenceException' in ResourcePlanningC2.exe
Exception thrown: 'System.FormatException' in mscorlib.dll
Exception thrown: 'System.NullReferenceException' in ResourcePlanningC2.exe
Exception thrown: 'System.NullReferenceException' in ResourcePlanningC2.exe
Exception thrown: 'System.FormatException' in mscorlib.dll
The program '[12772] ResourcePlanningC2.exe' has exited with code -1 (0xffffffff).
It must be hanging on some null values. Is there an easy way to handle this?
|
|
|
|
|
I think I got it, Thanks for the help!
var q =
from a1 in dt_Jobs.AsEnumerable()
orderby a1.Field<String>("City")
where (a1.Field<String>("City") != null)
select a1.Field<String>("City");
var lstCity = q.Distinct().ToList();
cboCity.DataSource = lstCity;
|
|
|
|
|
Hi.
Just a quick question, what way do you prefer in connecting database to your web application? Is it through class or config file?
What are the advantages and drawbacks?
Thank you for answering.
|
|
|
|
|
That isn't a question: the two are not comparable.
A config file is where you store your connections string so you don't have to change your application code at all for different environments: you just edit the config file and insert the correct connection string.
A class is an code element, which in C# you have no choice at all to use or not use as the whole language is class based.
So how do you suggest that it could be "one or the other"?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Thank you for the clarification. So there is really no effect at all when it comes to what is more reliable in connecting to the database server.
|
|
|
|
|
We cannot answer your question properly because you haven't made clear what your question really is. You might know what you're asking us but your question makes so little sense that it's impossible to answer properly. To reiterate what Griff said, you cannot do anything with a database from configuration as that's all it is, configuration. In order to connect to a database, you need to have code that actually handles things such as getting records out of the database, updating it and so on - even if you were to map your entire database in configuration, there still has to be some code somewhere that actually handles the "talking to the database part".
Now, what I think you're actually asking is, is it better to store the connection information in the configuration, or in a class? Is that the question?
This space for rent
|
|
|
|
|
|
Dear coder/Mathematician folk,
I have a question on how to best peak search a series of noise like points. The points are stored as doubles in a double array. The points represent voltage levels in dBuV.
I'm not a mathematician and I have limited knowledge regarding the elegancie's of how C# can be put to handle complex problems. Or maybe not so complex to some
I would like 'n' points returning that have a delta from there neighbours of >= 6dB and within a specified window of 'm' points.
The window allows us to reject all peaks regardless of delta bar the point with the highest peak.
As we go through the data points we look at each point [DP] with respect to its neighbour. If the delta to left neighbour [P1] is >= 6dB and delta to right neighbour [P2] is >= 6dB we have a peak.
if either neighbours delta is less than 6dB we may have a slope condition. We must there for ride the slope with respect to [P2] goint up and down the troughs until we hit a transition and the delta from [P2] is >= 6dB. This would be our next point.
We repeat the process though all points returning just the peaks that are separated by the window width and have clear >= 6dB margin from there neighbours.
The following data represents a typical trace. Only points 9,11, and 24 are real points that should be returnd.
double[] trace = new double[] {47.92370605,44,49,46.31715393,44.98129654,46.17653275,78,73,82,63,69,41.72979736,41.13000488,41.49586487,37,40,30,40.79894257,40.65593719,41.37298584,39.13498688,55,51,60,39.3440094,38.51491547,42,35.12589264};
I hope I explained things clearly. Please feel free to ask for any clarifications
Many thanks for your time and effort
Nigel
|
|
|
|
|
So, what code do you have so far? What is the problem that you are trying to solve (e.g., is your logic too slow)?
This space for rent
|
|
|
|
|
Hi Pete,
Thanks for getting back to me,
I have a modified peak search function that returns peak/troughs.
public static IEnumerable<Tuple<int, double>> LocalPeakMinMax(IEnumerable<double> source, int windowSize)
{
if (windowSize < 2) windowSize = 2;
windowSize = windowSize - windowSize % 2 + 1;
int halfWindow = windowSize / 2;
int index = 0;
var before = new Queue<double>(Enumerable.Repeat(double.NegativeInfinity, halfWindow));
var after = new Queue<double>(source.Take(halfWindow + 1));
foreach (double d in source.Skip(halfWindow + 1).Concat(Enumerable.Repeat(double.NegativeInfinity, halfWindow + 1)))
{
double curVal = after.Dequeue();
if (before.All(x => curVal > x ) && after.All(x => curVal >= x ))
{
yield return Tuple.Create(index, curVal);
}
else
if (before.All(x => curVal <= x) && after.All(x => curVal < x))
{
yield return Tuple.Create(index, curVal);
}
before.Dequeue();
before.Enqueue(curVal);
after.Enqueue(d);
index++;
}
}
The problem is I cannot figure out how best to filter out all the chaff and return the peaks that align with the prescribed logic explained in my original post.
I was going to take the output from this and play with it but it was getting messy. I was hoping the community may be able to come up with a more elegant solution. The code isn't slow at all, quite the opposite. At least with the 625 points i'm currently playing with.
Br
Nigel
modified 1-Feb-18 5:22am.
|
|
|
|
|
Searching for peaks, and using your example here, the following code gives you the results you expect:
double[] trace =
{
47.92370605, 44, 49, 46.31715393, 44.98129654, 46.17653275, 78, 73, 82, 63, 69, 41.72979736, 41.13000488,
41.49586487, 37, 40, 30, 40.79894257, 40.65593719, 41.37298584, 39.13498688, 55, 51, 60, 39.3440094,
38.51491547, 42, 35.12589264
};
for (int i = 1; i < trace.Length - 1; i++)
{
double deltaLeft = trace[i - 1];
double deltaRight = trace[i + 1];
if (trace[i] - deltaLeft >= 6 && trace[i] - deltaRight >= 6)
{
Console.WriteLine($"Peak at {i + 1}");
}
} You may notice that I don't start at 0 and I don't finish at the last element in the array; as it's assumed that you will always have a left and right value, this is sufficient.
This space for rent
|
|
|
|
|